我可以在运行时添加junit测试用例吗?

jac*_*ope 4 java junit

我有一个测试程序,需要测试很多xml模板。

但是我发现我必须为每个xml模板编写一个测试用例。

junit是否具有可以在一个测试用例中生成另一个测试用例的机制?

Mat*_*ell 5

您可以使用@Parameterized。这会给你你想要的。这是一个简单的情况,对单个目录中的所有文件运行测试:

@RunWith(Parameterized.class)
public class ParameterizedTest {
    @Parameters(name = "{index}: file {0}")
    public static Iterable<Object[]> data() {
        File[] files = new File("/temp").listFiles();

        List<Object[]> objects = new ArrayList<Object[]>(files.length);

        for (File file : files) {
            objects.add(new Object[] { file.getAbsolutePath() });
        }

        return objects;
    }

    private final String filename;

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

    @Test
    public void test() {
        System.out.println("test filename=" + filename);
    }
}
Run Code Online (Sandbox Code Playgroud)

文件中的每个测试针对所返回的列表中的每个条目都运行一次data()。您显然可以对文件进行任何操作,但是如果要动态构建测试列表,则还需要某种方式来构建通过/失败标准。因此,如果要将大量xml转换为其他xml,则还需要生成的xml可用,可能在不同的目录中或具有不同的(但可预测的)名称。