java - 当单元测试覆盖率低于多模块项目中的预配置限制时,maven 构建失败
问题描述
当聚合的单元测试覆盖率低于 Maven 多模块项目中的预配置限制时,有人可以告诉我如何使构建失败?
例如,假设module1
有 70% 的代码覆盖率,module2
有 100% 的代码覆盖率,如果指定了 90% 的覆盖率,那么构建应该会失败,因为平均覆盖率为 85%。
我正在使用 jacoco 生成代码覆盖率以生成.exec
包含覆盖率数据的聚合文件。但正如这里 jacoco:check
所讨论的,仅在模块级别有效。
所以看起来像 jacoco 一个人无法完成我正在寻找的工作。有人可以让我知道我可以在聚合jacoco.exec
文件上使用哪些其他工具来完成这项工作吗?
尝试的方法
正如我的@Karol 所建议的那样
我的项目结构如下
main
- module1
- module2
在main.pom
我添加了以下部分
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.5.201505241946</version>
<executions>
<execution>
<id>pre-unit-test</id>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<destFile>${jacoco.ut.execution.data.file}</destFile>
</configuration>
</execution>
<execution>
<id>merge-execs</id>
<phase>pre-site</phase>
<inherited>false</inherited>
<goals>
<goal>merge</goal>
</goals>
<configuration>
<fileSets>
<fileSet>
<directory>${basedir}</directory>
<includes>
<include>**/target/*.exec</include>
</includes>
</fileSet>
</fileSets>
<destFile>${jacoco.ut.merged.exec}</destFile>
</configuration>
</execution>
<execution>
<id>jacoco-check</id>
<phase>verify</phase>
<goals>
<goal>check</goal>
</goals>
<configuration>
<rules>
<rule>
<element>BUNDLE</element>
<limits>
<limit>
<counter>LINE</counter>
<value>COVEREDRATIO</value>
<minimum>0.80</minimum>
</limit>
</limits>
</rule>
</rules>
<dataFile>${jacoco.ut.merged.exec}</dataFile>
</configuration>
</execution>
</executions>
</plugin>
然后在这样做时,mvn pre-site
我可以看到合并的 exec 文件正在创建,如下所示
[INFO] Loading execution data file /var/code/github/vnera/main/module1/target/jacoco.exec
[INFO] Loading execution data file /var/code/github/vnera/main/module2/target/jacoco.exec
[INFO] Writing merged execution data to /var/code/github/vnera/main/target/jacoco_vrni_main.exec
但是当我跑步时,mvn jacoco:check@jacoco-check
我看到检查被以下消息跳过
[INFO] --- jacoco-maven-plugin:0.7.5.201505241946:check (jacoco-check) @ main ---
[INFO] Skipping JaCoCo execution due to missing classes directory:/var/code/github/vnera/main/target/classes
解决方案
在构建中定义一个有jacoco:merge
目标的步骤:
Mojo 用于将一组执行数据文件 (*.exec) 合并到一个文件中
然后通过使用目标属性jacoco:check
指向这个合并的覆盖文件来应用它。<dataFile>
或者,您可以使用正确的 JaCoCo 多模块覆盖设置SonarQube并配置Quality Gates以确保最小的代码覆盖:
质量门是在您的组织中执行质量政策的最佳方式。它可以回答一个问题:我今天可以将我的项目交付生产吗?
为了回答这个问题,您需要根据衡量项目的衡量阈值定义一组布尔条件。例如:
- 没有新的拦截器问题
- 新代码的代码覆盖率超过 80%
- 等等。
推荐阅读
- ruby - Ruby Pry 定位触发 pry 的测试文件
- python - 带有'if'语句的bs4列表理解
- angularjs - firestore is rejecting post request from angularjs
- highcharts - Highchart 图例,标签对移动模式没有响应,并且看起来太小
- sql - 将日期时间显式转换为 varbinary
- ios - 更改变量时内容视图未更新
- python - 通过 Pypdf2 提取和合并 PDF
- c++ - 串行代码中的字节到Arduino上的数组
- python - MaxRetryError 硒
- maven - 即使我所有的测试都通过了,我也看到了surefire错误的错误,没有与surefire插件相关的答案对我有帮助