2016-09-08 26 views
0

我想用TestNG以編程方式運行Test Suite。TestNG:以編程方式運行測試 - 執行測試方法時,在XmlTest對象上設置的參數爲null

我創建的測試structurde:XmlSuite - > Xmltest的 - >識別TestClass(延伸XmlClass)

我做三兩件事:

  • 添加參數的XMLTest與addParameter(字符串,字符串)
  • 設定參數爲識別TestClass與setParameters(MAP)
  • 在識別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來說,參數數量可能會有所不同,這將是抽象的。最好的做法是將Map作爲參數傳遞,但只能使用String。我想讓TestClass包含不同的對象,這些對象在執行時不會爲空。 – jnowakow

+1

如果您願意,您可以注入'ITestContext',但是我沒有看到如何輕鬆找到類參數,因爲ITestContext提供了視圖。 – juherr

相關問題