2016-09-08 2 views
0

Я хочу запустить Test Suite программно с помощью TestNG.TestNG: программный запуск теста - параметры, установленные в объекте XmlTest, являются нулевыми при выполнении метода теста

Я создал тест structurde: XmlSuite -> XmlTest -> TestClass (который расширяет XmlClass)

Я делаю три вещи:

  • добавляющие параметр в XmlTest с addParameter (String, String)
  • установки параметра в TestClass с SetParameters (Карта)
  • установкой переменного дня в TestClass

Но что происходит при выполнении теста, когда он переходит к методу @Test, у объекта нет вещей, которые я задал раньше.

Код

public class TestRunner { 
    public static void main(String[] args) { 
     XmlSuite suite = new XmlSuite(); 
     suite.setName("TmpSuite"); 

     XmlTest test = new XmlTest(suite); 
     test.setName("TmpTest"); 
     // Add parameter to XmlTest 
     test.addParameter("testParam1", "clock"); 

     TestClass testClass = new TestClass(); 

     // Add parameter to XmlClass 
     Map<String, String> testClassParameters = new HashMap<>(); 
     testClassParameters.put("classParam1", "valueOfClassParam1"); 
     testClass.setParameters(testClassParameters); 

     // Set day variable 
     testClass.setDay("Friday"); 
     testClass.setClass(TestClass.class); 

     test.setXmlClasses(Arrays.asList(testClass)) ; 

     TestNG tng = new TestNG(); 
     tng.setXmlSuites(Arrays.asList(suite)); 

     tng.run(); 
    } 
} 

public class TestClass extends XmlClass { 

    private String day; 

    @Test 
    public void test1() { 
     System.out.println("Day: " + day); 
     System.out.println("LocalParameters: " + getLocalParameters()); 
     System.out.println("AllParameters: " + getAllParameters()); 
    } 

    public void setDay(String day) { 
     this.day = day; 
    } 
} 

Результат:

Day: null 
LocalParameters: {} 
------------> Exception 

ответ

0

Я думаю, что вы ждете, чтобы сделать это:

public class TestRunner { 
    public static void main(String[] args) { 
     // Add parameter to XmlClass 
     Map<String, String> testClassParameters = new HashMap<>(); 
     testClassParameters.put("classParam1", "valueOfClassParam1"); 
     testClassParameters.put("day", "Friday"); 

     TestClass testClass = new TestClass(); 
     testClass.setParameters(testClassParameters); 
     testClass.setClass(TestClass.class);  

     XmlSuite suite = new XmlSuite(); 
     suite.setName("TmpSuite"); 

     XmlTest test = new XmlTest(suite); 
     test.setName("TmpTest"); 
     // Add parameter to XmlTest 
     test.addParameter("testParam1", "clock"); 
     test.setXmlClasses(Arrays.asList(testClass)) ; 

     TestNG tng = new TestNG(); 
     tng.setXmlSuites(Arrays.asList(suite));  
     tng.run(); 
    } 
} 

public class TestClass { 

    @Parameters({ "day", "testParam1", "classParam1" }) 
    @Test 
    public void test1(String day, String testParam1, String classParam1) { 
     System.out.println("Day: " + day); 
     System.out.println("testParam1: " + testParam1); 
     System.out.println("classParam1: " + classParam1); 
    } 
} 
+0

Да, что-то около этого. Но номера параметров могут отличаться для TestClasses, которые будут абстрактными. Лучше всего было бы передать параметр «Карта как параметр», но возможно только «Строка». Я хотел бы иметь TestClass, содержащий разные объекты, которые не будут иметь значения null при выполнении. – jnowakow

+1

Вместо этого вы можете добавить «ITestContext», но если не хотите, как легко найти параметры класса, потому что ITestContext предоставляет вид . – juherr

Смежные вопросы