如果JUnit覆盖率低于某个阈值,如何使maven构建失败



我正在从声纳休息api获得单元测试覆盖率指标。

如果生成低于定义的值,如何使生成失败?

JaCoCo提供了该功能。

具有配置规则的JaCoCo

使用LINEBRANCH:的配置规则COVEREDRATIO定义JaCoCo插件

<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.7.201606060606</version>
<executions>
<execution>
<id>default-prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>check</id>
<goals>
<goal>check</goal>
</goals>
<configuration>
<rules>
<rule>
<element>CLASS</element>
<limits>
<limit>
<counter>LINE</counter>
<value>COVEREDRATIO</value>
<minimum>0.80</minimum>
</limit>
<limit>
<counter>BRANCH</counter>
<value>COVEREDRATIO</value>
<minimum>0.80</minimum>
</limit>
</limits>
<excludes>
<exclude>com.xyz.ClassToExclude</exclude>
</excludes>
</rule>
</rules>
</configuration>
</execution>
</executions>
</plugin>

各种选择

支持的counter选项包括:

  • 线路
  • 分支
  • 指令
  • 复杂性
  • 方法

我相信INSTRUCTION将允许您进行一般检查(例如,验证整个项目至少有0.80的覆盖率)。

说明示例-总说明覆盖率为80%的

此示例要求总指令覆盖率为80%必须错过类:

<rules>
<rule implementation="org.jacoco.maven.RuleConfiguration">
<element>BUNDLE</element>
<limits>
<limit implementation="org.jacoco.report.check.Limit">
<counter>INSTRUCTION</counter>
<value>COVEREDRATIO</value>
<minimum>0.80</minimum>
</limit>
<limit implementation="org.jacoco.report.check.Limit">
<counter>CLASS</counter>
<value>MISSEDCOUNT</value>
<maximum>0</maximum>
</limit>
</limits>
</rule>
</rules>

故障消息

如果覆盖范围未达到预期,则会失败,并显示以下消息:

[WARNING] Rule violated for class com.sampleapp.SpringConfiguration: lines covered ratio is 0.00, but expected minimum is 0.80
[WARNING] Rule violated for class com.sampleapp.Launcher: lines covered ratio is 0.33, but expected minimum is 0.80
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------

除外条款

在上面的例子中,我设置了<exclude>com.xyz.ClassToExclude</exclude>。我想你会发现你需要添加许多除外条款。项目通常包含许多不可测试/测试的类(Spring Configuration、Java Bean…)。您也可以使用正则表达式。


来源:

  • http://choudhury.com/blog/2014/02/25/enforcing-minimum-code-coverage
  • http://www.eclemma.org/jacoco/trunk/doc/maven.html
  • http://www.eclemma.org/jacoco/trunk/doc/check-mojo.html

如果您使用的是0.8.2或类似版本的jacoco-maven插件,请确保定义了数据文件,并对插件使用以下配置。

<execution>
<id>jacoco-check</id>
<goals>
<goal>check</goal>
</goals>
<configuration>
<dataFile>${project.build.directory}/coverage-reports/jacoco.exec</dataFile>
<rules>
<rule>
<element>BUNDLE</element>
<limits>
<limit>
<counter>INSTRUCTION</counter>
<value>COVEREDRATIO</value>
<minimum>0.17</minimum>
</limit>
</limits>
</rule>
</rules>
</configuration>
</execution>

此代码确保了17%的总体覆盖率。

请使用对此进行验证

mvn干净验证

命令。

Specify the datFile location if it is not under default folder.
<execution>
<id>check</id>
<goals>
<goal>check</goal>
</goals>
<configuration>
<dataFile><path-to-jacoc-ut.exec></dataFile>
<rules><rule>
<element>CLASS</element>
<limits>
<limit>
<counter>LINE</counter>
<value>COVEREDRATIO</value>
<minimum>0.80</minimum>
</limit>
<limit>
<counter>BRANCH</counter>
<value>COVEREDRATIO</value>
<minimum>0.80</minimum>
</limit>
</limits>
<excludes>
<exclude>com.xyz.ClassToExclude</exclude>
</excludes>
</rule></rules></configuration>
</execution>

最新更新