我正在尝试运行Junit参数化测试。以下是Junit建议将数据添加到数组集合的方法。
Object[][] data = new Object[][] { { 1 }, { 2 }, { 3 }, { 4 } };
return Arrays.asList(data);
然而,这需要用户在代码中添加数据。我想从文件中读取数据(大约300行)并将其转换为数组集合。我怎样才能做到这一点 ?
以下是代码:
import static org.junit.Assert.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
@RunWith(value=Parameterized.class)
public class UrlParameterizedTest {
private String url;
public static ArrayList<String>dataArray=new ArrayList<String>();
static File directory = new File(".");
public static String fileToRead;
public UrlParameterizedTest(String url){
this.url=url;
}
@Parameters
public static Collection<Object[]> data() throws Exception {
try {
fileToRead=directory.getCanonicalPath()+"\\Data\\LinkChecker.csv";
loadDataFile(fileToRead);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Object[][]data=new Object[dataArray.size()][];
******* //convert dataArray to data here.************
return Arrays.asList(data);
}
@Test
public void testURLs() {
System.out.println("Parameterized Number is "+url);
}
public static void loadDataFile(String dataFile) throws Exception {
dataArray.clear();
//if data_file is absolute, use this
try
{
// Open an input stream
// Read a line of text
String line="";
BufferedReader br=new BufferedReader(new FileReader(dataFile));
while((line=br.readLine())!=null) {
dataArray.add(line);
}
br.close();
System.out.println("The data file length is "+ dataArray.size());
}
catch (IOException e)
{
e.printStackTrace();
System.out.println ("Unable to read from file");
}
}
}
答案 0 :(得分:2)
使用Apache Commons FileUtils.readFileToString
将文件读取为字符串。然后,您需要将文件解析为数组集合。我们无法帮助您解析文件,我们也不知道内容。
答案 1 :(得分:0)
将您的数据放在一个文件中,一个放在另一个文件中。使用扫描仪将它们作为字符串读取,然后将它们转换为数字(我假设它们应该是浮点数)。 像这样:
ArrayList<Float> numbers = new ArrayList<Float>();
Scanner scanner = new Scanner(file);
while(scanner.hasNextLine()) {
String nextLine = scanner.nextLine();
float value = Float.parseFloat(nextLine);
numbers.add(value);
}
scanner.close();
答案 2 :(得分:0)
为了从文件中检索字符串,您可以使用类似以下代码的内容;然后你可以从你的ArrayList中检索数据并将它们放入你的数组中(使用Class ArrayList提供的“toArray()”方法)。
ArrayList<String> strings=new ArrayList<String >();
String filePath = path + "/" + fileName;
FileInputStream fin = null;
try {
fin = new FileInputStream(filePath);
} catch (IOException e) {
System.out.println (e.toString());
System.out.println("File " + fileName + " not found.");
}
DataInputStream in = new DataInputStream(fin);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine = null;
while ((strLine = br.readLine()) != null) {
strings.add(strLine);
}
in.close();