在TestNG

时间:2019-03-22 07:12:35

标签: java testng testng-dataprovider parameterized-tests

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

这是代码

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[],但不必从该方法返回任何测试类。

1 个答案:

答案 0 :(得分:4)

您可以使用@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>