Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在TestNG数据提供程序中迭代CSV文件_Java_Collections_Testng_Testng Dataprovider - Fatal编程技术网

Java 在TestNG数据提供程序中迭代CSV文件

Java 在TestNG数据提供程序中迭代CSV文件,java,collections,testng,testng-dataprovider,Java,Collections,Testng,Testng Dataprovider,对于如何最好地实现一个简单的数据提供者,我有点困惑,因为以前没有这样做过 我有一个非常简单的逗号分隔的.csv文件: 978KAL,625JBH,876SSH,452GSH 我只需要读入它并遍历记录,对每个记录运行相同的测试,直到完成为止 到目前为止,我的代码是: String csvFile = "src/test/resources/registrationsData.csv"; BufferedReader br = null; String line

对于如何最好地实现一个简单的数据提供者,我有点困惑,因为以前没有这样做过

我有一个非常简单的逗号分隔的.csv文件:

978KAL,625JBH,876SSH,452GSH
我只需要读入它并遍历记录,对每个记录运行相同的测试,直到完成为止

到目前为止,我的代码是:

String csvFile = "src/test/resources/registrationsData.csv";
    BufferedReader br = null;
    String line = "";
    String cvsSplitBy = ",";


    @DataProvider(name="getRegistrations")
    private Object[] getCSVTestData() {
        Object [] registrationsObject;
        try {

            br = new BufferedReader(new FileReader(csvFile));
            while ((line = br.readLine()) != null) {

                // use comma as separator
                String [] registrations = line.split(cvsSplitBy);

                System.out.println( registrations[0] + "," + registrations[1]);

            }

        } catch//File not found & IOException handling here
        registrationsObject = new Object[][]{registrations};
        return registrationsObject;
    }



    @Test(dataProvider = "getRegistrations")
    public void getRegistrations(String registration){

        Object[] objRegArray =  getCSVTestData();

        for(int i=0; objRegArray.length>i; i++){
        //run tests for every record in the array (csv file)
    }
 }
我知道我需要为数据提供程序方法使用对象数组返回类型

我不清楚如何(和/或最佳方式)从objRegArray对象检索每条记录


我想这是一个基本的问题;有人能给我指出正确的方向吗?

请检查此代码,并给出我下面的解释:

package click.webelement.testng;
导入org.testng.annotations.DataProvider;
导入org.testng.annotations.Test;
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.util.Iterator;
导入java.util.Scanner;
公共类OneLineCSV{
最终静态字符串CSV_FILE=“/path_to_FILE/oneline.CSV”;
最终静态字符串DELIMETER=“,”;
@数据提供者(name=“test”)
公共迭代器testDP(){
试一试{
扫描仪扫描仪=新扫描仪(新文件(CSV_文件)).useDelimiter(DELIMETER);
返回新的迭代器(){
@凌驾
公共布尔hasNext(){
返回scanner.hasNext();
}
@凌驾
公共对象[]下一个(){
返回新对象[]{scanner.next()};
}
};
}catch(filenotfounde异常){
e、 printStackTrace();
返回null;
}
}
@测试(dataProvider=“测试”)
公共void testOneLineCSV(字符串值){
系统输出打印项次(值);
}
}
因此,我将使用
Scanner
类,因此它具有将字符串解析为令牌的便利工具

我还将使用该功能在数据提供程序中返回
迭代器
,因为
扫描仪
就是这样设计的。您只需使用新的迭代器对其进行包装,该迭代器将
Scanner.next()
返回的
String
转换为
new Object[]{Scanner.next}


迭代器
扫描仪
配合使用确实更舒适,因为您可能不知道需要提供多少值。所以你不应该介意定义数组大小。

请不要。@jonrsharpe我很抱歉,我不确定这篇文章的最佳位置,因为我是从QA的角度来看的。鉴于你已经接受了这里的答案,你可能应该删除另一篇,非常感谢你花时间给出示例并解释得这么好