我想让Jenkins的工作是运行一个ant任务来运行我的代码库中标记为@Ignore的所有测试,因为使用像@Category(IgnoredTest.class)这样的注释不能用于我们的测试运行并行化。经过大量的搜索,它看起来很难以解决,但我仍然有希望。救命?
JUnit 4.10
答案 0 :(得分:0)
您可以创建一个特殊的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>
答案 1 :(得分:0)
我不确定您的&#34;测试运行并行化&#34;的障碍是什么,但如果您愿意使用自定义和&#34;,您可以通过规则执行此操作#34;忽略&#34;注释而不是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
我能想到的这种方法的一个缺点是你的测试没有被正确标记为&#34;被忽略&#34;因为这也是通过BlockJUnit4ClassRunner.runChild()
方法完成的,如果您偷看ParentRunner.runLeaf()
(runChild()
个代表),您会看到通知程序,即你需要报告被忽略的测试,是不是传递得足以被规则使用。同样,它是你需要定制Runner for。