如何设计数据驱动的JUnit测试类

时间:2013-03-22 03:26:16

标签: java junit parameterized data-driven-tests

@Parameters
public static Collection data() throws IOException {       
   ArrayList<String> lines = new ArrayList();

   URL url = PokerhandTestCase.class.getClassLoader().getResource("test/TestFile.txt");
   File testFile = new File(url.getFile());
   FileReader fileReader = new FileReader(testFile);
   bufReader = new BufferedReader(fileReader);
   assertFalse("Failed to load the test file.", testFile == null);

   boolean isEOF = false;
   while (!isEOF){

        String aline = bufReader.readLine();

        if (aline == null){
            System.out.println("Done processing.");
            isEOF = true;
        }

        lines.add(aline);   
   }

   return Arrays.asList(lines); 

 }

程序的最后一行导致崩溃,我想知道从arrayList定义集合的正确方法是什么。 Collection作为返回类型需要此函数。

3 个答案:

答案 0 :(得分:3)

用这个替换最后一行:

return (Collection)lines;

由于ArrayList实现了Collection接口:http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html

总体代码:

  public static Collection data() throws IOException 
  {
    ArrayList<String> lines = new ArrayList();
    // populate lines collection...
    return (Collection)lines;
  }

根据以下评论,或许这可以称为“数组集合”:

  public static Collection data() throws IOException 
  {
    ArrayList<String> array1 = new ArrayList();
    ArrayList<String> array2 = new ArrayList();
    ArrayList<String> array3 = new ArrayList();
    // populate lines collection...
    ArrayList<ArrayList<String>> lines = new ArrayList();
    lines.add(array1);
    lines.add(array2);
    lines.add(array3);
    return (Collection)lines;
  }

答案 1 :(得分:0)

  

ArrayList lines = new ArrayList();   ...   return Arrays.asList(lines);

这返回二维数组。

  

此功能是Collection作为返回类型所必需的。

我认为user1697575的答案是正确的。

答案 2 :(得分:0)

您要归还的收藏品必须是Collection<Object[]>。您正在返回一个集合。你需要做这样的事情(完整的例子):

@RunWith(Parameterized.class)
public class MyTest {
    @Parameters
    public static Collection<Object[]> data() throws IOException {
        List<Object[]> lines = new ArrayList<>();

        File testFile = new File("/temp/TestFile.txt");
        FileReader fileReader = new FileReader(testFile);
        BufferedReader bufReader = new BufferedReader(fileReader);
        Assert.assertFalse("Failed to load the test file.", testFile == null);

        boolean isEOF = false;
        while (!isEOF) {
            String aline = bufReader.readLine();

            if (aline == null) {
                System.out.println("Done processing.");
                isEOF = true;
            }

            lines.add(new Object[] { aline });
        }

        return lines;
    }

    private final String file;

    public MyTest(String file) {
        this.file = file;
    }

    @Test
    public void test() {
        System.out.println("file=" + file);
    }

}

请注意,您没有在此处关闭文件,并且您在列表的末尾添加了一个无用的空值,但我复制了您的代码: - )。