一:概述
眾所周知,軟體的程式碼覆蓋率是衡量軟體質量的重要指標,
我們今天簡單介紹 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 中找到,你可以自己拉下來跑跑看