【问题标题】:Junit create tests based on dynamic dataJunit 基于动态数据创建测试
【发布时间】:2013-09-10 20:50:57
【问题描述】:

我需要创建一个测试套件,其中的子套件包含为我检查数据的测试(使用 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,但这也不起作用:我需要在那里手动设置测试名称,但它仍然无法正常运行。也不鼓励扩展 junit.framework 类。

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

我正在考虑迁移到 Junit 3。

【问题讨论】:

    标签: java junit


    【解决方案1】:

    你可以看看这个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;
    }
    

    【讨论】:

    • 是的,但是由于这个方法是static,我无法为该方法提供例如它需要获取文件的动态路径。
    • @Peterdk JUnit 需要知道在执行其中任何一个测试用例之前将运行多少个测试用例,因此该方法是静态的。你能给出一个动态路径的例子吗?很抱歉我没听懂。
    • 正如在 startpost 中看到的,我需要为每个 typename 文件夹单独的测试套件。所以参数化测试需要知道它需要哪个文件夹:filesInThisDir 需要以某种方式动态接收文件路径。这是做不到的。
    猜你喜欢
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    • 2010-09-26
    • 2022-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多