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

考虑一个例子:

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元素,但只有少数具体的?

我可能会组织我的测试不同。 基于testName,数据提供者将返回数据。 我会有三个测试

  1. testCommons
  2. testString1
  3. testOtherString

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

你可以使用Hamcrest或Truth这样的框架来组织你的断言。 在Hamcrest中,您可以创建自定义匹配器,而在Truth中,您可以创建自己的主题。 有关详细信息,请参阅Hamcrest教程和真相 – 可扩展性的写入自定义匹配器部分。

您也可以通过创建静态实用程序方法来简单地组织断言,在静态实用程序中执行多个断言,如果您想要更流利的代码,那么您可以将测试从Java转换为支持扩展功能的 Kotlin等语言(另请参阅转换用J2K将Kotlin存在的Java文件 )。

Interesting Posts