TestNg:如何为DataProvider中的多个对象只运行一次方法



我有一个具有2个对象的DataProvider,因此TestNg认为它是2个测试用例。因此,如果我使用@BeforMethod,它也会运行两次。

@DataProvider
public static Object[][] dp() {
return new Object[][]{
{new Object1()},
{new Object2()}
};
}

我想只运行一次methodA(),无论从数据提供程序返回多少对象迭代,而methodB()每次都需要运行。


@Test(dataProviderClass = DataProvider.class, dataProvider = "dp")
methodA();
methodB();
}

我搜索并发现我可以使用一个布尔值,它会让我知道方法是否被执行,一旦执行后,我可以将布尔值设置为true,但是在我的类中有多个测试用例,所以不确定如何处理所有的测试用例。对此有什么好的解决方案吗?

我在想,如果以某种方式我可以从数据提供程序中获得对象的计数,这也可能有所帮助。如有任何帮助,不胜感激。

与尝试

boolean isExecuted = false;
if(!isExecuted) {
methodA();
isExecuted=true;
}

但这只适用于一个测试用例,我在我的类中有多个测试用例。

您可以使用两个数据提供程序。一个会取另一个的第一个值。这样代码看起来就像:

public class NewTest {
@DataProvider(name = "commonCase")
public Object[][] dp(){
return new String[][]{
{"My str1"},
{"My str2"},
{"My str3"}
};
};
@DataProvider(name = "specialCase")
public Object[][] dpSpecial(){
return new Object[][]{
dp()[0]
};
}
@Test(dataProvider = "specialCase")
public void testA(String val){
System.out.println(val);
}
@Test(dataProvider = "commonCase")
public void testB(String val){
System.out.println(val);
}
}

最新更新