Ant 运行所有标记为@Ignore的测试
我想做一个Jenkins作业来运行ant任务,以运行代码库中标记为@Ignore的所有测试,因为使用@Category(IgnoredTest.class)之类的注释不能与测试运行并行化一起工作。经过大量的搜索,它看起来是无法挽回的,但我仍然有希望。帮忙Ant 运行所有标记为@Ignore的测试,ant,junit,junit4,Ant,Junit,Junit4,我想做一个Jenkins作业来运行ant任务,以运行代码库中标记为@Ignore的所有测试,因为使用@Category(IgnoredTest.class)之类的注释不能与测试运行并行化一起工作。经过大量的搜索,它看起来是无法挽回的,但我仍然有希望。帮忙 JUnit4.10您可以创建一个特殊的ant目标,删除@Ignore注释,并将@Ignore注释添加到任何活动的@Test注释方法中 目标是这样的: <project name="anyname" default="test" based
JUnit4.10您可以创建一个特殊的ant目标,删除@Ignore注释,并将@Ignore注释添加到任何活动的@Test注释方法中 目标是这样的:
<project name="anyname" default="test" basedir=".">
..
..
<target name="enable-ignored-test" depends="copy-code-to-replace-ignored">
<fileset id="fsTestCase" dir="." includes="**/*Test.java">
</fileset>
<replaceregexp flags="gm">
<regexp pattern="^@Ignore"/>
<substitution expression=""/>
<fileset refid="${fsTestCase}"/>
</replaceregexp>
<replaceregexp flags="gm">
<regexp pattern="@Test"/>
<substitution expression="@Ignore @Test"/>
<fileset refid="${fsTestCase}"/>
</replaceregexp>
</target>
<target name="run-ignored-tests" depends="enable-ignored-test,test" />
..
..
</project>
..
..
..
..
我不确定“测试运行并行化”的障碍是什么,但如果您愿意使用自定义的“忽略”注释而不是JUnit注释,则可以使用规则来实现这一点。原因是JUnit在运行程序级别处理@Ignored测试,特别是在(默认情况下)中。如果您能找到一种在Ant中使用定制跑步器的方法,您可以很容易地找到一种满足您需求的方法,但我不知道这在Ant中是否容易实现
不过,正如我第一次提到的,您可以轻松地使用不同的注释和规则来选择要运行的方法。我很快地写了一封信。我的小例子使用了一个系统属性进行切换,但是很明显,你也可以让它切换任何你能想到的,你可以在这里动手的东西
您可以使用以下工具克隆并运行此示例:
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
我能想到的这种方法的一个缺点是,您的测试不会正确地标记为“忽略”,因为这也是由该方法完成的,如果您查看(which
runChild()
delegates to),您会看到通知程序,这是您需要报告忽略的测试的通知程序,没有被传得足够远,不能被规则使用。同样,这需要一个定制的运行程序。这是可行的,不确定是否有现成的解决方案。从…开始。您可以构建具有忽略注释的方法集合,然后使用这些方法调用方法运行程序。谢谢,我将对此进行研究。