1. 程式人生 > >Maven整合JaCoCo和Sonar,看看你的測試寫夠了沒

Maven整合JaCoCo和Sonar,看看你的測試寫夠了沒

# 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) **多讀書,多分享;多寫作,多整