如果有人编写新的单元测试,但忘记将其添加到套件中,即使稍后有人打破测试,连续构建也将继续愉快地通过。有没有办法发现未包含在套件中的JUnit测试?查找任何套件中未包含的JUnit 3测试?
编辑
我知道我可以移动到JUnit 4中,但接下来的问题是,如何找到那个失踪@Test标注测试?
如果有人编写新的单元测试,但忘记将其添加到套件中,即使稍后有人打破测试,连续构建也将继续愉快地通过。有没有办法发现未包含在套件中的JUnit测试?查找任何套件中未包含的JUnit 3测试?
编辑
我知道我可以移动到JUnit 4中,但接下来的问题是,如何找到那个失踪@Test标注测试?
移动到junit4?
并不总是可能的。有一些测试框架,例如GWT测试,这取决于TestCase。 – 2010-06-21 20:59:52
和人们可能仍在使用JDK 1.4 ... – topchef 2010-06-23 16:41:57
我会做到以下几点:
使用的find
和grep
某种组合来提取应该测试类名字的列表;例如对于包含extend TestCase
的文件,请使用grep
。
在测试报告上使用find
和grep
的一些组合来提取实际运行的测试类的列表。
对两个列表进行排序并使用diff
进行比较。
存在误报和漏报的风险;例如不直接延伸到TestCase
的测试班可能会通过网络。但这种方法会给你一个快速的“第一切”答案。
使用TestSuite.tests()
你就可以生产的测试名单(递归)包含在测试套件(列表1)和使用Java反射,你可以生产所有测试的列表(从扩展TestCase
类)(列表2)。
然后减去list1 from list2生成不包含在任何套件中的测试列表。
运行此Java程序时,类路径应包含所有测试类。
我建议不要手动创建测试套件。相反,请确保您的构建自动运行您的“测试”目录下的所有测试。 Ant支持使用<junit>元素来执行此操作。
您还可以创建一个套件,通过查找扩展TestCase的所有非抽象类来找到要运行的测试。您可以使用Reflections推出自己的反射套件,或者搜索免费实现(请参阅How do I programmatically run all the JUnit tests in my Java application?)
缺少@Test注释的测试不是JUnit4中的测试。 – topchef 2010-06-23 03:18:15
@grigory当然,但这是一个很常见的错误。 – 2010-06-23 12:46:51
我的观点是,使用JUnit 3时,您的问题非常合适:如何查找不属于任何测试套件的测试(从测试开始并属于TestCase的子类的方法)。有了JUnit 4,问题就变成了:如何找到不是测试的测试。 – topchef 2010-06-23 16:44:38