【问题标题】:Find JUnit 3 tests that are not included in any suite?查找未包含在任何套件中的 JUnit 3 测试?
【发布时间】:2010-06-21 20:34:09
【问题描述】:

如果有人编写了一个新的单元测试,但他们忘记将它添加到一个套件中,那么即使后来有人破坏了测试,连续构建也将继续愉快地通过。有没有办法发现套件中不包含的 JUnit 测试?

编辑
我知道我可以迁移到 JUnit 4,但问题就变成了,我如何找到缺少 @Test 注释的测试?

【问题讨论】:

  • 缺少@Test 注解的测试不是 JUnit4 中的测试。
  • @grigory 当然,但这是一个很常见的错误。
  • 我的观点是,对于 JUnit 3,您的问题非常合理:如何找到不属于任何测试套件的测试(以 test 开头并属于 TestCase 子类的方法)。在 JUnit 4 中,问题变成了:如何找到不是测试的测试。

标签: java unit-testing junit


【解决方案1】:

移动到junit4?

【讨论】:

  • 并非总是可能的。有一些测试框架,例如GWT 测试,依赖于 TestCase。
【解决方案2】:

我会做以下事情:

  1. 使用findgrep 的某种组合来提取假定的测试类名称列表;例如grep 用于包含 extend TestCase 的文件。

  2. 在测试报告中使用findgrep 的某种组合来提取实际运行的测试类的列表。

  3. 对两个列表进行排序并使用diff 进行比较。

存在误报和漏报的风险;例如不直接扩展TestCase 的测试类可能会漏网。但这种方法会给你一个快速的“第一切”答案。

【讨论】:

    【解决方案3】:

    使用TestSuite.tests(),您可以(递归地)生成包含在测试套件(list1)中的测试列表,并使用 Java 反射,您可以生成所有测试的列表(来自扩展 TestCase 的类) (list2)。

    然后从 list2 中减去 list1 以生成未包含在任何套件中的测试列表。

    类路径应包含运行此 Java 程序时的所有测试类。

    【讨论】:

      【解决方案4】:

      我建议不要手动创建测试套件。相反,请确保您的构建自动运行“测试”目录下的所有测试。 Ant 支持使用 元素来执行此操作。

      您还可以创建一个套件,通过查找所有扩展 TestCase 的非抽象类来找到要运行的测试。您可以使用Reflections 推出自己的反射套件或搜索免费实现(请参阅How do I programmatically run all the JUnit tests in my Java application?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-11-04
        • 2014-06-25
        • 1970-01-01
        • 2021-12-23
        • 2015-01-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多