[英]maven fail build when unit test coverage fails below a pre-configured limit in a multimodule project
有人可以讓我知道,當聚合的單元測試覆蓋率低於Maven多模塊項目中的預配置限制時,如何使構建失敗?
例如,假設module1
具有70%的代碼覆蓋率, module2
具有100%的代碼覆蓋率,並且如果指定90%的覆蓋率,則構建應會失敗,因為平均覆蓋率為85%。
我正在使用jacoco生成代碼coverage,以生成包含coverage數據的聚合.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)合並到一個文件中
然后通過使用<dataFile>
目標屬性指向該合並的coverage文件,對其應用jacoco:check
。
或者,您可以使用正確的JaCoCo多模塊覆蓋率設置SonarQube並配置Quality Gates以確保最小的代碼覆蓋率:
質量門是在組織中實施質量策略的最佳方法。 在那里可以回答一個問題:我可以今天將項目交付生產嗎?
為了回答這個問題,您可以根據測量項目的測量閾值定義一組布爾條件。 例如:
- 沒有新的阻止程序問題
- 新代碼的代碼覆蓋率大於80%
- 等等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.