在TestNG中参数化@BeforeMethod方法

问题描述 投票:4回答:1

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

这是代码

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

java testng testng-dataprovider parameterized-tests
1个回答
4
投票

您可以使用@Parameters注释,但是您必须在testng,xml中指定值,这意味着您必须为每组参数分别设置testng.xml

这是一个例子:

app test.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>
© www.soinside.com 2019 - 2024. All rights reserved.