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方法,如何以及在该方法中添加什么真正取决于您。