我正在使用TestNG框架进行单元测试。使用DataProvider注释,我能够成功地将输入数据从CSV文件传递到测试方法。
问题是我的测试类中有几个测试方法,每个测试方法都需要一个不同的数据集作为测试输入。所有输入都存在于单个csv文件中。我知道我可以通过在类级别使用DataProvider注释来指定单个输入文件。但是,有没有办法只使用输入CSV文件中的特定数据来运行测试文件中的每个测试用例?
为了更清楚,我的测试类(比如TestDemo)将有3种测试方法(比如test1,test2,test3)。 有一个CSV文件包含所有3种方法的测试数据。无论如何,我可以将其指定为输入文件,但仅使用用于该测试的数据运行每个测试吗?
提前致谢。
答案 0 :(得分:1)
我使用Apache Metamodel读取@DataProvider方法中的.CSV文件并返回2-d数组。很简单。
我wrote an example of doing it here,当然是使用TestNG。具体而言,this class。
请记住,如果将电子表格行中的所有项目放入Object [],那么您可以将其作为单个对象直接传递给测试方法,并且@BeforeMethod之前能够访问该行数据你的实际测试甚至开始。这是JUnit 4.x无法做到的事情。
答案 1 :(得分:0)
TestNG不支持开箱即用,但您应该能够轻松地进行调整。 e.g:
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 */
}
}