我曾经将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)”?
答案 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);
}
}