我的测试有一个基础测试类,该类在每个测试之前进行初始化工作。

这是代码

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>

10-06 12:55
查看更多