对于持续集成构建,我们使用JcCoCo来最小化要运行的测试数量。但是,在某些提交中,它确定没有值得运行的测试。例如,如果只更改了图像。
以下是build.xml
:
<fileset id="int.tests" dir="${build.inttest.source}/java">
<include name="**/*Test.java"/>
</fileset>
<taskdef name="testng" classname="org.testng.TestNGAntTask"
classpath="${build.jars.test}/testng.jar"/>
<jacoco:coverage destfile="./inttest-jacoco.exec">
<testng outputDir="./reports/intTest" failureproperty="testNGFailed" haltonfailure="false"
verbose="2" workingDir="${build.dir}" classfilesetref="int.tests">
<classpath>
<path refid="build.inttest.classpath"/>
</classpath>
</testng>
</jacoco:coverage>
如果未运行任何测试,则属性testNGFailed
将设置为true,并且构建随后将失败。
此方案中的日志记录如下所示:
13:16:49,116 INFO - [testng] ===============================================
13:16:49,116 INFO - [testng] Ant suite
13:16:49,116 INFO - [testng] Total tests run: 0, Failures: 0, Skips: 0
13:16:49,116 INFO - [testng] ===============================================
13:16:49,116 INFO -
13:16:49,191 WARN - [testng] [TestNG] No tests found. Nothing was run
如果没有要运行的测试,我怎样才能使构建通过,但是当任何测试失败时如何失败?
我可以让Jacoco始终至少进行一次测试吗?
我可以让TestNG仅在测试失败时设置失败属性吗?
答案 0 :(得分:0)
首先 - JaCoCo不执行您的测试!测试由TestNG或JUnit或任何测试框架执行 - JaCoCo只收集此执行的覆盖信息。
根据http://testng.org/doc/ant.html:
classfilesetref - 对包含要运行的测试类的ResourceCollection的引用
而在你的情况下,它指向包含.java
文件的目录,因此TestNG无法找到测试似乎是合乎逻辑的。