Junit基于动态数据创建测试

时间:2013-09-09 13:58:34

标签: java junit

我需要创建一个测试套件,其子套件包含为我检查数据的测试(使用java库)。它的目标是测试库是否正常工作。可以把它想象成病毒扫描程序定义检查。 我有老Junit / Nunit的经验,并期望它很容易。然而,事实证明它不适用于Junit4。

我有以下文件系统布局:

typename(dir)
    - file1
    - file2
typename(dir)
    - file1
    - file2
    - file3
etc.

我需要运行一个测试每个文件的unittest,并且存在于“typename”测试套件中。我们的想法是处理文件系统,然后动态生成测试用例和套件:

for (File typeNameDir: typenameDirs)
{
  TestSuite typenameSuite= new TestSuite();
  typenameSuite.setName(typename);
  for (File file: filesInThisDir)
  {
     typenameSuite.addTest(new FileTest(File));
  }
}

现在的问题是addTest期望一个实现Test的类,但这是一个框架的接口而不可用,因为它需要实现的低级方法。我也尝试扩展TestCase但这也行不通:我需要手动设置testname,但仍然无法正常运行。也不鼓励扩展junit.framework类。

所以,看起来我需要使用Parameterized选项,但这不允许我输入动态生成的数据......那么我该怎么办?

我正在考虑转移到Junit 3。

1 个答案:

答案 0 :(得分:0)

您可以查看此post。作者描述了一种在运行时生成测试用例的解决方案。

只是出于好奇,为什么@Parameterized不允许您输入动态生成的数据?它不像这样工作?

@Parameters
public static Collection<Object[]> data() {
          List<Object[]> data = new ArrayList<Object[]>();
          //load files
          for (File file: filesInThisDir) {
               data.add(file);
          }

          return data;
}