Java Junit基于动态数据创建测试

Java Junit基于动态数据创建测试,java,junit,Java,Junit,我需要创建一个testsuite,其中的子套件包含为我检查数据的测试(使用java库)。它的目标是测试库是否正常工作。把它想象成病毒扫描定义检查。 我有使用老Junit/Nunit的经验,并希望它非常简单。然而,事实证明Junit4并非如此 我有以下文件系统布局: typename(dir) - file1 - file2 typename(dir) - file1 - file2 - file3 etc. 我需要运行一个单元测试来测试每个文件,并在“t

我需要创建一个testsuite,其中的子套件包含为我检查数据的测试(使用java库)。它的目标是测试库是否正常工作。把它想象成病毒扫描定义检查。 我有使用老Junit/Nunit的经验,并希望它非常简单。然而,事实证明Junit4并非如此

我有以下文件系统布局:

typename(dir)
    - file1
    - file2
typename(dir)
    - file1
    - file2
    - file3
etc.
我需要运行一个单元测试来测试每个文件,并在“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

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


我正在考虑搬到JUnit3。你可以看看这个。作者描述了一种在运行时生成测试用例的解决方案

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

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

          return data;
}
@参数
公共静态收集数据(){
列表数据=新的ArrayList();
//加载文件
for(文件:filesInThisDir){
数据添加(文件);
}
返回数据;
}

是的,但由于此方法是静态的,因此我无法为该方法提供获取文件所需的动态路径。@Peterdk JUnit需要知道在执行任何测试用例之前将运行多少个测试用例,因此该方法是静态的。你能给出一个动态路径的例子吗?很抱歉,我没有得到它。正如在startpost中所看到的,我需要为每个typename文件夹提供一个单独的测试套件。因此,参数化测试需要知道它需要哪个文件夹:
filesInThisDir
需要以某种方式动态接收文件路径。那是不可能的。