我的测试有一个基础测试类,该类在每个测试之前进行初始化工作。
这是代码
public class BaseTestParameters {
MyObj myObj;
@DataProvider(name = "apiType")
public static Object[][] createData() {
return new Object[][] {{"type", "1"},{"type","2"}};
}
@BeforeMethod()
@Factory(dataProvider = "apiType")
public void setup(String type,String param) throws Exception {
myObj = createMyObject(param);
}
}
我所有的测试类都扩展了该基类,并且它们使用
myObj
进行测试。myObj
具有两种不同的创建方式(取决于参数)。所有测试将运行两次。一种以每种方式构成
myObj
。如何启用此方案?
使用
@Factory
批注意味着我需要从该方法返回Object[]
,但不必从该方法返回任何测试类。 最佳答案
您可以使用@Parameters
批注,但是必须在testng,xml
中指定值,这意味着您必须为每个参数集使用单独的testng.xml
。
这是示例:
AppTest.java
public class AppTest {
@Parameters({"par1", "par2"})
@BeforeMethod()
public void setUp(String a, String b) {
System.out.println("a = [" + a + "], b = [" + b + "]");
}
@Test
public void testApp() {
}
}
testng.xml
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1" verbose="1" >
<test name="Run1" >
<parameter name="par1" value="val"/>
<parameter name="par2" value="anotherval"/>
<packages>
<package name="dummy.java" />
</packages>
</test>
<test name="Run2" >
<parameter name="par1" value="newValue"/>
<parameter name="par2" value="yetAnotherVal"/>
<packages>
<package name="dummy.java" />
</packages>
</test>
</suite>