IT干货网

ant之运行所有标记为@Ignore 的测试

zhengyun_ustc 2025年01月19日 编程设计 53 0

我想做一个 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 的东西。


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!