[英]How organize assertions for testing data driven tests?
考虑一个例子:
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class DataProviderExampleTest {
@Test(dataProvider="data")
public void testDataProvider(int p1, String p2) {
/*
assert block for all p1 and p2 parameters
*/
// ???
// how to put p1 and p2 specific assertions here?
//jst for example
if (p2.equals("myString")) {
//asserts for myString
}
if (p2.equals("otherString")) {
//asserts for otherString
}
}
@DataProvider
public Object[][] data() {
return new Object[][]{/*dozen objects here*/};
}
}
该示例已简化 ,在现实生活中, p1
和p2
可能是非常复杂的对象,带有需要复杂断言的子类。
testng是否提供一些api来将参数的特定断言放在某个地方,但不会创建过长的if
或switch
条件? (我认为if
和switch
就像测试中的重复业务逻辑一样,应避免使用)
在all
情况下all
可以使用通用算法检查all
元素,但只有少数特定条件可以检查的情况下,建议采用哪种数据驱动的开发方法呢?
我可能会以不同的方式组织测试。 基于testName,数据提供者将返回数据。 我将进行三项测试
将方法参数传递给dataprovider。 数据提供者根据测试名称决定发送数据。
您可以使用Hamcrest或Truth之类的框架将断言组织在一起。 在Hamcrest中,您可以创建自定义匹配器,在Truth中,您可以创建自己的主题。 有关详细信息,请参见《 Hamcrest教程和真相-可扩展性》中的“ 编写自定义匹配器”部分。
您还可以通过创建静态实用程序方法来简单地组织断言,该方法在其中可以执行多个断言,如果要使用更流畅的代码来实现,则可以将测试从Java转换为支持扩展功能的 Kotlin之类的语言(另请参见转换使用J2K到Kotlin的现有Java文件 )。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.