我正在使用TestNG框架进行单元测试。使用DataProvider注释,我能够成功地将输入数据从CSV文件传递给测试方法。
问题是我的测试类中有几种测试方法,每种方法都需要不同的数据集作为测试输入。所有输入都存在于一个csv文件中。我知道我可以通过在类级别使用DataProvider注释来指定单个输入文件。但是,有没有办法通过仅使用输入CSV文件中的特定数据来运行测试文件中的每个测试用例?
为了更清楚起见,我的测试类(比如TestDemo)将有3种测试方法(比如test1、test2、test3)。有一个包含所有3种方法的测试数据的CSV文件。无论如何,我可以指定它作为输入文件,但只使用该测试的数据运行每个测试吗?
提前感谢。
我使用Apache Metamodel读取@DataProvider方法中的.CSV文件并返回二维数组。非常简单。
我在这里写了一个这样做的例子,当然是使用TestNG。具体来说,这个类。
请记住,如果您将电子表格行中的所有项目放入Object[]中,那么您可以将其作为单个对象直接传递给您的测试方法,并且@BeforeMethod能够在实际测试开始之前访问该行数据。这是JUnit 4. x无法做到的。
TestNG不支持开箱即用,但您应该能够轻松适应它。例如:
public class TestDemo {
private static Object[][] data() {
/* Your original data provider code that returns test data for each test method.
* You may wish to cache the result using memoization to avoid reading the CSV file
* multiple times. */
}
@DataProvider(indices = 0)
public static Object[][] data1() {
return data();
}
@Test(dataProvider = "data1")
public void test1(/* test 1 data parameters */) {
/* test 1 code */
}
@DataProvider(indices = 1)
public static Object[][] data2() {
return data();
}
@Test(dataProvider = "data2")
public void test2(/* test 2 data parameters */) {
/* test 2 code */
}
@DataProvider(indices = 2)
public static Object[][] data3() {
return data();
}
@Test(dataProvider = "data3")
public void test3(/* test 3 data parameters */) {
/* test 3 code */
}
}