如何 运行 在 junit 或 testng 中使用来自 csv 文件的不同测试数据集进行多个测试用例

how to run multiple test cases in junit or testng with different set of test data from csv file

我希望这种情况让我有点困惑。我想 运行 一些使用 junit 或 testng 以及来自 csv 文件的不同数据集的测试用例。下面给出了我尝试过的代码片段,但它确实有效,

    private static CSVReader csvReader = null;
    @BeforeClass
        public static void setUp() {
            csvReader = new CSVReader(new FileReader(fileName));
        }

    @Test
    public void test1() {
        .......
        .......
        System.out.println(csvReader[0]);
    }

    @Test
    public void test2() {
        .......
        .......
        System.out.println(csvReader[1]);
    }

    @Test
    public void test3() {
        .......
        .......
        System.out.println(csvReader[2]);
    }

    @Test
    public void test4() {
        .......
        .......
        System.out.println(csvReader[3]);
    }

我的问题是我需要在不同的测试用例中使用每一列的数据,如果我在 csv 文件中有多行,我需要再次迭代所有测试用例。我尝试过使用 Theories 和 Datapoints,但它的工作方式是第一个案例 运行s 包含 csv 文件中的所有行,然后移动到下一个测试用例,然后再次 运行s 包含 csv 中的所有行。

我想要 运行 test1() 的解决方案,第一行第一列,test2() 第一行第二列,test3() 第一行第三列,test4() 第四列第一行的列然后需要用第二行迭代,依此类推。是否可以像这样迭代测试用例?据我搜索,我们可以通过多种方式迭代特定的测试用例。我的问题是,是否可以用一组数据迭代 class 中的所有测试,然后用来自 csv.

的另一组数据再次重复 class

我们可以使用 junit 或 testng 来完成吗?如果是这样,请证明一些示例代码。提前致谢!

好吧,有 parameterized tests...你可以使用它们。

@RunWith(Parameterized.class)
public class YourTest {
    @Parameters
    public static Collection<Object[]> data() {
        try( FileReader read = new FileReader(fileName)) {
            CSVReader csvReader = new CSVReader(reader);

            List<CSVRecord> records = ... read data;

            Object[][] parameters = new Object[records.length][1];
            for(int i=0; i<records.length; i++) {
               parameters[i][0] = records.get(i);
            }
            return parameters;
        }
    }

    private CsvRecord record;  // [0] from the array goes here

    public YourTest (CsvRecord record) {
        this.record = record;
    }

    @Test
    public void test() {
         ...do something with the record
    }
}

而TestNG的解决方案是:

public class YourTest {

    @DataProvider
    public static Object[][] data() {
        try( FileReader read = new FileReader(fileName)) {
            CSVReader csvReader = new CSVReader(reader);

            List<CSVRecord> records = ... read data;

            Object[][] parameters = new Object[records.length][1];
            for(int i=0; i<records.length; i++) {
               parameters[i][0] = records.get(i);
            }
            return parameters;
        }
    }

    @Test(dataProvider="data")
    public void test(CsvRecord record) {
         ...do something with the record
    }
}