如果有人写了一个新的单元测试,但是他们忘记将它添加到套件中,即使有人后来破坏了测试,连续构建也将继续愉快地通过。有没有办法发现未包含在套件中的JUnit测试?
修改
我知道我可以转到JUnit 4,但问题就变成了,我怎么找到缺少@Test注释的测试?
答案 0 :(得分:1)
转到junit4?
答案 1 :(得分:1)
我会做以下事情:
使用find
和grep
的某种组合来提取假定的测试类名称列表;例如grep
包含extend TestCase
。
在测试报告中使用find
和grep
的某种组合来提取实际运行的测试类的列表。
对两个列表进行排序,并使用diff
进行比较。
存在误报和漏报的风险;例如不直接扩展TestCase
的测试类可能会漏网。但是这种方法会给你一个快速的“第一切”答案。
答案 2 :(得分:1)
使用TestSuite.tests()
,您可以生成测试套件( list1 )中包含的测试列表(递归),并使用Java反射生成所有测试的列表(来自扩展{{ 1}})( list2 )。
然后从 list2 中减去 list1 以生成未包含在任何套件中的测试列表。
运行此Java程序时,类路径应包含所有测试类。
答案 3 :(得分:1)
我建议不要手动创建测试套件。相反,请确保您的构建自动运行“tests”目录下的所有测试。 Ant支持使用< junit>执行此操作的方法元件。
您还可以创建一个套件,通过查找扩展TestCase的所有非抽象类来查找要运行的测试。您可以使用Reflections滚动自己的反光套件,或搜索免费实施(请参阅How do I programmatically run all the JUnit tests in my Java application?)