2010-06-21 55 views
0

如果有人编写新的单元测试,但忘记将其添加到套件中,即使稍后有人打破测试,连续构建也将继续愉快地通过。有没有办法发现未包含在套件中的JUnit测试?查找任何套件中未包含的JUnit 3测试?

编辑
我知道我可以移动到JUnit 4中,但接下来的问题是,如何找到那个失踪@Test标注测试?

+0

缺少@Test注释的测试不是JUnit4中的测试。 – topchef 2010-06-23 03:18:15

+0

@grigory当然,但这是一个很常见的错误。 – 2010-06-23 12:46:51

+0

我的观点是,使用JUnit 3时,您的问题非常合适:如何查找不属于任何测试套件的测试(从测试开始并属于TestCase的子类的方法)。有了JUnit 4,问题就变成了:如何找到不是测试的测试。 – topchef 2010-06-23 16:44:38

回答

1

移动到junit4?

+0

并不总是可能的。有一些测试框架,例如GWT测试,这取决于TestCase。 – 2010-06-21 20:59:52

+0

和人们可能仍在使用JDK 1.4 ... – topchef 2010-06-23 16:41:57

1

我会做到以下几点:

  1. 使用的findgrep某种组合来提取应该测试类名字的列表;例如对于包含extend TestCase的文件,请使用grep

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

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

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

1

使用TestSuite.tests()你就可以生产的测试名单(递归)包含在测试套件(列表1)和使用Java反射,你可以生产所有测试的列表(从扩展TestCase类)(列表2)。

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

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

1

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

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