簡體   English   中英

當單元測試覆蓋率低於多模塊項目中的預配置限制時,maven將失敗構建

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM