一:概述
衆所周知,軟件的代碼覆蓋率是衡量軟件質量的重要指標,
我們今天簡單介紹 JaCoCo 的實際使用示例,它是目前在大多數 Java 項目中應用最廣泛的覆蓋率檢測框架
更多資料參考:JaCoCo 官網
二:引入 Maven 依賴
在 Java 項目中爲了方便使用 JaCoCo,我推薦使用它提供的這款 Maven Plngin,在你的 pom.xml
加入依賴:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${lacoco-last-version}</version>
<executions>
<execution>
<id>default-prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>default-report</id>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
這裏使用 ${lacoco-last-version}
變量,推薦你儘量使用最新的 Maven 版本
三:生成覆蓋率報告
準備環境:
- Maven 3.x+
- 你的項目必須包含合理單元測試
在你項目在執行命令:
$ mvn clean install # 發佈構建到你的本地 Maven 倉庫
當項目編譯完成後,在項目目錄:target/site/jacoco/index.html
即可查看到圖形化的測試報告,如下:
點擊鏈接,你可以查看每個類的代碼覆蓋情況,如下:
小知識:index.xml 只是覆蓋率的 UI 展示,覆蓋率的真正數據存儲在 target/site/jacoco/jacoco.xml 文件中,jacoco.xml 結合 SonarQube 等工具使用會有更好的覆蓋率報告展示效果,不過這是後話,後面有機會再聊
我們簡單說明以上三種顏色是怎麼回事:
- 紅色標記:表示代碼塊沒有被測試的代碼
- 黃色標記:通常表示只有部分分支被覆蓋
- 綠色標記:表示代碼已經全部被單元測試執行過
以下是一個 100% 覆蓋率的示例:
覆蓋率詳細情況:
補充:JaCoCo 涉及的概念比較多,有興趣可以看官網對其他概念名詞的解釋,這裏不多贅述
四:最低覆蓋率限制
在真實項目開發中,我們會爲項目設置一個覆蓋率指標,未達標的項目會無法通過構建,或者無法通過 CI 集成
那麼在項目中,我們可以這樣設置覆蓋率的最小值限制,如下:
<execution>
<id>jacoco-check</id>
<goals>
<goal>check</goal>
</goals>
<configuration>
<rules>
<rule>
<element>PACKAGE</element>
<limits>
<limit>
<counter>LINE</counter>
<value>COVEREDRATIO</value>
<minimum>0.50</minimum>
</limit>
</limits>
</rule>
</rules>
</configuration>
</execution>
如上,當項目覆蓋率低於 50% 的時候,Maven 就會提示構建事情
五:總結
本文簡單介紹 JaCoCo 最基本使用和上手,希望你可以通過官網探索更多的高級功能
關於覆蓋率給你一些建議:
- 覆蓋率指標大多數情況下僅作爲參考,不要用它作爲考覈指標
- 不要過於追求覆蓋率指標,100% 的覆蓋率也不能代表你的項目沒有 BUG
上文演示的項目源代碼可以在 GitHub Project 中找到,你可以自己拉下來跑跑看