亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何配置多模塊Maven + Sonar + JaCoCo以提供合并的覆蓋率報告?

如何配置多模塊Maven + Sonar + JaCoCo以提供合并的覆蓋率報告?

萬千封印 2019-12-10 13:09:51
我已經在互聯網上上下搜索了這個。與Maven屬性(例如${sonar.jacoco.reportPath},或org.jacoco:jacoco-maven-plugin:prepare-agent或通過設置)maven-surefire-plugin argLine有關的答案很多-javaagent。這些答案,無論是單獨還是組合使用,都不怎么產生我的期望:覆蓋率報告,如果在更高級別的測試中使用了某個類(例如正在使用的實體),則該類將覆蓋該類由DAO負責,即使它自己的模塊中的測試并未完全涵蓋它。請問某處是否有明確的配置來實現這一目標?
查看完整描述

3 回答

?
慕的地8271018

TA貢獻1796條經驗 獲得超4個贊

我和您處在同一情況下,分散在整個互聯網上的一半答案很煩人,因為似乎很多人都遇到了同樣的問題,但是沒有人會費心去解釋他們是如何解決的。


該聲納的文檔是指 一個GitHub的項目,例子是有幫助的。我要解決的問題是將集成測試邏輯應用于常規單元測試(盡管正確的單元測試應特定于子模塊,但并非總是如此)。


在父pom.xml中,添加以下屬性:


<properties>

    <!-- Sonar -->

    <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>

    <sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>

    <sonar.jacoco.reportPath>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPath>

    <sonar.language>java</sonar.language>

</properties>

這將使Sonar拾取同一位置(父項目中的目標文件夾)中所有子模塊的單元測試報告。它還告訴Sonar重用手動運行的報告,而不是滾動自己的報告。我們只需將jacoco-maven-plugin放置在build / plugins內的父pom中,即可為所有子模塊運行:


<plugin>

    <groupId>org.jacoco</groupId>

    <artifactId>jacoco-maven-plugin</artifactId>

    <version>0.6.0.201210061924</version>

    <configuration>

        <destFile>${sonar.jacoco.reportPath}</destFile>

        <append>true</append>

    </configuration>

    <executions>

        <execution>

            <id>agent</id>

            <goals>

                <goal>prepare-agent</goal>

            </goals>

        </execution>

    </executions>

</plugin>

destFile將報告文件放置在Sonar會查找的位置,并將append其添加到文件中,而不是覆蓋它。這會將所有JaCoCo報告合并到同一文件中的所有子模塊。


Sonar將為每個子模塊查看該文件,因為這就是我們在上面指出的內容,因此我們可以為Sonar中的多模塊文件提供組合的單元測試結果。



查看完整回答
反對 回復 2019-12-11
?
忽然笑

TA貢獻1806條經驗 獲得超5個贊

自0.7.7版以來的新方法

從0.7.7版開始,有一種新方法可以創建匯總報告:


您創建一個單獨的“報告”項目,該項目將收集所有必要的報告(聚合器項目中的任何目標均在其模塊之前執行,因此無法使用)。


aggregator pom

  |- parent pom

  |- module a

  |- module b

  |- report module 

該根POM看起來是這樣的(不要忘了在模塊添加新的報表模塊):


<build>

<plugins>

  <plugin>

    <groupId>org.jacoco</groupId>

    <artifactId>jacoco-maven-plugin</artifactId>

    <version>0.7.8</version>

    <executions>

      <execution>

        <id>prepare-agent</id>

        <goals>

          <goal>prepare-agent</goal>

        </goals>

      </execution>

    </executions>

  </plugin>

</plugins>

每個子模塊的poms根本不需要更改。報表模塊中的pom 如下所示:


<!-- Add all sub modules as dependencies here -->

<dependencies>

  <dependency>

    <module a>

  </dependency>

  <dependency>

    <module b>

  </dependency>

 ...

  <build>

    <plugins>

      <plugin>

        <groupId>org.jacoco</groupId>

        <artifactId>jacoco-maven-plugin</artifactId>

        <version>0.7.8</version>

        <executions>

          <execution>

            <id>report-aggregate</id>

            <phase>verify</phase>

            <goals>

              <goal>report-aggregate</goal>

            </goals>

          </execution>

        </executions>

      </plugin>

    </plugins>

  </build>

完整的示例可以在這里找到。



查看完整回答
反對 回復 2019-12-11
  • 3 回答
  • 0 關注
  • 589 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號