0

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");
        }
    }
}
4

3 に答える 3

2

Apache CommonsFileUtils.readFileToStringを使用して、ファイルを文字列に読み取ります。次に、ファイルを配列のコレクションに解析する必要があります。ファイルの解析方法についてはお手伝いできず、内容もわかりません。

FileUtils.readFileToString

于 2013-01-31T11:44:04.503 に答える
0

In order to retrieve strings from a File you could use something like the follow code; then you could retrieve data from your ArrayList and put them in your array (using "toArray()" method provided by Class ArrayList).

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();
于 2013-01-31T11:52:30.027 に答える
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();
于 2013-01-31T11:51:06.767 に答える