我想做一个 Jenkins 作业来运行一个 ant 任务来运行我的代码库中所有标记为 @Ignore 的测试,因为使用 @Category(IgnoredTest.class) 之类的注释不适用于我们的测试运行并行化。经过大量搜索,它看起来无法解决,但我仍然抱有希望。帮助?
JUnit 4.10
请您参考如下方法:
我不确定您的“测试运行并行化”的障碍是什么,但如果您愿意使用自定义“忽略”注释而不是 JUnit 注释,您也许可以使用规则来做到这一点。原因是 JUnit 在 Runner 级别处理 @Ignored 测试,特别是在 BlockJUnit4ClassRunner.runChild()
中。 (默认情况下)。如果您能找到一种在 Ant 中使用自定义 Runner 的方法,您可以很容易地想出一个来满足您的需求,但我不知道这在 Ant 中是否容易实现。
不过,正如我首先提到的,您可以轻松地使用不同的注释和规则来选择要运行的方法。我快速编了一个example of such a rule on github , 以及 a test that uses it .我的小示例使用系统属性进行切换,但您显然也可以让它打开您能想到的任何您可以在此处获得的东西。
您可以克隆并运行此示例:
git clone git@github.com:zzantozz/testbed tmp
cd tmp
mvn test -pl stackoverflow/9611070-toggleable-custom-ignore -q
mvn test -pl stackoverflow/9611070-toggleable-custom-ignore -q -D junit.invertIgnores
我能想到的这种方法的一个缺点是您的测试不会被正确标记为“已忽略”,因为这也是由 BlockJUnit4ClassRunner.runChild()
完成的方法,如果你偷看ParentRunner.runLeaf()
(runChild()
委托(delegate)),您会看到通知程序(您需要报告被忽略的测试)没有向下传递到足以被规则使用的程度。同样,这是您需要自定义 Runner 的东西。