Java 如何组织用于测试数据驱动测试的断言?
举个例子:Java 如何组织用于测试数据驱动测试的断言?,java,testng,data-driven-tests,Java,Testng,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
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
就像测试中重复的业务逻辑,应该避免)
另外,当
所有元素都可以用通用算法检查,但只有少数元素可以用特定算法检查时,数据驱动的开发方法建议如何做?我可能会以不同的方式组织测试。基于testName,dataprovider将返回数据。我要做三次测试
testCommons
testString1
测试其他字符串
将方法参数传递给数据提供程序。数据提供者根据测试的名称决定是否发送数据 您可以使用类似或的框架将断言组织在一起。在Hamcrest中,您可以创建自定义匹配器,事实上,您可以创建自己的主题。有关详细信息,请参阅和的“编写自定义匹配器”部分
您还可以通过创建静态实用程序方法来组织断言,该方法在断言中执行多个断言,如果您想使用更流畅的代码来组织断言,那么您可以将测试从Java转换为类似于Java的语言(另请参见)。您能提供更多详细信息吗?如果问题只是关于复杂对象的断言--->每个对象都有一个equals方法。为了比较两个复杂对象,您可以调用它们的equals方法,您可以重写并反过来调用任何嵌套对象类型的equals方法。这种设计模式称为访问者模式。TestNG所做的一切就是调用equals方法,如何以及在该方法中添加什么真正取决于您。