Maven整合JaCoCo和Sonar,看看你的測試寫夠了沒
阿新 • • 發佈:2020-05-21
# 1 簡介
單元測試是保證程式碼質量的重要一環,而如何衡量單元測試寫得好不好呢?`覆蓋率(Coverage)`是一個重要指標。而`JaCoCo`則是專門為`Java`提供的用於檢測測試覆蓋率的工具,英文全稱為`Java Code Coverage`。
本文將講解如何在`Maven`專案中整合`JaCoCo`,並在`SonarQube`中展示。`SonarQube`的安裝可以參考這篇文章:
《[Docker搭建程式碼檢測平臺SonarQube並檢測maven專案](https://www.pkslow.com/archives/docker-sonarqube)》
# 2 基本概念
這裡所講的`覆蓋率`是指測試程式碼的覆蓋率,這個指標有多種計算方式,如下是比較常用的有:
- 行覆蓋率:執行程式碼行數 / 總程式碼行數,判斷有多少行程式碼被測試執行;
- 類覆蓋率:執行的類 / 程式碼中類總個數;
- 分支覆蓋率:執行的邏輯分支數 / 總的分支數,一般用於檢測是不是`lf/else`都有測試覆蓋;
- 方法覆蓋率:執行的方法數 / 程式碼總方法數,檢測是否有方法被遺漏,構造方法也看作為方法。
- 圈複雜度:用於判斷程式碼結構的複雜程式,`JaCoCo`不考慮異常處理的分支;一般認為圈複雜度大於10,就存在比較大的風險,嚴格要求不可大於15。
顏色標識:
`JaCoCo`會通過顏色來標識程式碼覆蓋情況,使其一目瞭然。紅色表示沒有覆蓋,綠色表示已經覆蓋,黃色表示部分覆蓋。
執行方式:
執行`JaCoCo`有多種方式:
(1)直接通過命令執行:https://www.eclemma.org/jacoco/trunk/doc/agent.html
(2)Ant執行:https://www.eclemma.org/jacoco/trunk/doc/ant.html
(3)Maven執行:https://www.eclemma.org/jacoco/trunk/doc/maven.html
(4)整合IDE執行:https://www.eclemma.org/
我們接下來主要講解`maven`的方式。
# 3 maven整合
## 3.1 基礎整合
`Maven`整合`JaCoCo`也容易,配置如下:
```xml
```
執行`mvn clean test`,則會生成報告`target/coverage-reports/jacoco-unit.exec`,但這是人不可讀的,`Sonar`可讀的。`Intellij Idea`也可以閱讀,按照`Run--Show Code Coverage Data`開啟即可。
執行`mvn clean verify`,就會生成報告`target/site/jacoco/`,有多種格式,用瀏覽器開啟`index.html`檔案可以方便檢視。如下圖所示:
![SonarQube](https://img2020.cnblogs.com/other/946674/202005/946674-20200521000525426-697562546.png)
## 3.2 選擇範圍
指定某些類不執行檢測:
```xml
```
## 3.3 規則與閾值
`Rules`標籤可以指定檢查閾值,比如類覆蓋率必須為`100%`。在`configuration`裡面配置如下:
```xml
```
這時需要有下面的`check`才會執行這個規則校驗:
```xml
```
如果不滿足條件,`maven build`就會失敗。不過,如果我們集成了`SonarQube`,我們則會通過`SonarQube`來設定這個規則和閾值。
# 4 提交到Sonar
新增`SonarQube`配置資訊如下,有三種配置方式:
(1)配置資料庫資訊
```xml
```
(2)配置使用者名稱密碼
```xml
```
(3)配置令牌
```xml
```
以上三種都可以,配置完成後,執行命令如下:
```bash
mvn clean verify sonar:sonar
```
如果不想新增配置,可以直接通過命令來指定,命令如下:
```bash
mvn clean verify sonar:sonar -Dsonar.host.url=http://localhost:9000 -Dsonar.login=9656c84090b2481db6ea97b6d14d87d546bff619
```
# 5 總結
`JaCoCo`對專案質量管理作用重大,應該加以使用。最終的maven配置檔案`pom.xml`行數太大,請到( https://www.pkslow.com/archives/maven-jacoco-sonar )參考。
---
歡迎訪問[南瓜慢說 www.pkslow.com](https://www.pkslow.com/)獲取更多精彩文章!
歡迎關注微信公眾號<**南瓜慢說**>,將持續為你更新...
![](https://img2020.cnblogs.com/other/946674/202005/946674-20200521000525997-1976560565.jpg)
**多讀書,多分享;多寫作,多整