JUnit在文件中测试

时间:2012-09-19 12:16:12

标签: java junit

我曾经将JUnit测试编写为方法,例如:

public class TextualEntailerTest {
  @Test test1() {...}
  @Test test2() {...}
  @Test test3() {...}
}

由于大多数测试用例具有相似的结构,因此我决定采用“数据驱动”,并将测试内容放在XML文件中。所以,我创建了一个方法“testFromFile(file)”并将我的测试改为:

public class TextualEntailerTest {
  @Test test1() { testFromFile("test1.xml"); }
  @Test test2() { testFromFile("test2.xml"); }
  @Test test3() { testFromFile("test3.xml"); }
}

随着我添加越来越多的测试,我厌倦了为我添加的每个新测试文件添加一行。当然,我可以将所有文件放在一个测试中:

public class TextualEntailerTest {
  @Test testAll() { 
     foreach (String file: filesInFolder) 
       testFromFile(file); 
  }
}

但是,我更喜欢每个文件都是一个单独的测试,因为这样JUnit可以很好地统计传递和失败的文件数。

所以,我的问题是:如何告诉JUnit为给定文件夹中的所有文件运行单独的测试,其中每个测试的格式为“testFromFile(file)”?

3 个答案:

答案 0 :(得分:2)

您可以使用文件为Theories的{​​{1}},这样您就不需要循环测试,并允许在每个文件后进行设置和清理。但它仍然会被报道。

理论也存在一个问题,即它们会在上面的测试中快速失败(在第一次失败后退出)。我发现这不是一个好习惯,因为它可以隐藏你有多个错误的情况。我建议使用单独的测试或使用@DataPoints的循环。我真的希望ErrorCollector内置Theories

答案 1 :(得分:2)

不确定,但可能这些可以帮到你。 Reference1 Reference2。希望这会有所帮助。

答案 2 :(得分:1)

@RunWith(value = Parameterized.class)
public class JunitTest {

     private String filename;

     public JunitTest(String filename) {
        this.filename= filename;
     }

     @Parameters
     public static Collection<Object[]> data() {
       Object[][] data = new Object[][] { { "file1.xml" }, { "file2.xml" } };
       return Arrays.asList(data);
     }

     @Test
     public void Test() {
       System.out.println("Test name:" + filename);
     }


}