Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ant 运行所有标记为@Ignore的测试_Ant_Junit_Junit4 - Fatal编程技术网

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

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

我想做一个Jenkins作业来运行ant任务,以运行代码库中标记为@Ignore的所有测试,因为使用@Category(IgnoredTest.class)之类的注释不能与测试运行并行化一起工作。经过大量的搜索,它看起来是无法挽回的,但我仍然有希望。帮忙


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),您会看到通知程序,这是您需要报告忽略的测试的通知程序,没有被传得足够远,不能被规则使用。同样,这需要一个定制的运行程序。

这是可行的,不确定是否有现成的解决方案。从…开始。您可以构建具有忽略注释的方法集合,然后使用这些方法调用方法运行程序。谢谢,我将对此进行研究。