繁体   English   中英

如何组织断言来测试数据驱动的测试?

[英]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*/};
    }
}

该示例已简化 ,在现实生活中, p1p2可能是非常复杂的对象,带有需要复杂断言的子类。

testng是否提供一些api来将参数的特定断言放在某个地方,但不会创建过长的ifswitch条件? (我认为ifswitch就像测试中的重复业务逻辑一样,应避免使用)

all情况下all可以使用通用算法检查all元素,但只有少数特定条件可以检查的情况下,建议采用哪种数据驱动的开发方法呢?

我可能会以不同的方式组织测试。 基于testName,数据提供者将返回数据。 我将进行三项测试

  1. testCommons
  2. testString1
  3. testOtherString

将方法参数传递给dataprovider。 数据提供者根据测试名称决定发送数据。

您可以使用HamcrestTruth之类的框架将断言组织在一起。 在Hamcrest中,您可以创建自定义匹配器,在Truth中,您可以创建自己的主题。 有关详细信息,请参见《 Hamcrest教程真相-可扩展性》中的“ 编写自定义匹配器”部分。

您还可以通过创建静态实用程序方法来简单地组织断言,该方法在其中可以执行多个断言,如果要使用更流畅的代码来实现,则可以将测试从Java转换为支持扩展功能的 Kotlin之类的语言(另请参见转换使用J2K到Kotlin的现有Java文件 )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM