程式碼測試覆蓋率
寫在前頭
看了阿里開發手冊 “單元測試第八條的推薦”
單元測試的基本目標:語句覆蓋率達到 70% ;核心模組的語句覆蓋率和分支覆蓋率都
要達到 100%
之前在公司實習的時候,組內一個老哥對這個測試十分的看重,幾乎要達到100%的覆蓋面積。
我當時特別的不是很理解,感覺自己測試下每個分支就好了,不用搞的那麼複雜,後期又難以維護。
後來漸漸發覺,這是對自己程式碼的不負責任,也是對使用者不負責任
Jacoco程式碼覆蓋率
JaCoCo is a free code coverage library for Java, which has been created by the EclEmma team based on the lessons learned from using and integration existing libraries for many years. JaCoCo是一個免費的Java程式碼覆蓋庫,由EclEmma團隊根據多年來使用和整合現有庫的經驗教訓建立。
這是其官網介紹,也就是說,這個外掛可以檢測到你 寫了多少個測試。
而這些測試又對你的程式碼 覆蓋了多少
Jacoco用法
首先在Maven中引入一下外掛
1 <!-- 程式碼測試覆蓋率 --> 2 <plugin> 3<groupId>org.jacoco</groupId> 4<artifactId>jacoco-maven-plugin</artifactId> 5<version>0.7.8</version> 6<executions> 7<execution> 8<id>prepare-agent</id> 9<goals> 10<goal>prepare-agent</goal> 11</goals> 12</execution> 13<execution> 14<id>report</id> 15<phase>prepare-package</phase> 16<goals> 17<goal>report</goal> 18</goals> 19</execution> 20</executions> 21 </plugin>
然後Maven執行 mvn clean install -Dmaven.test.failure.ignore=true
後面紅色劃重點,意思是:如果在單元測試中,出現了錯誤,那麼忽略他,繼續執行下去。
這樣的好處是, Maven可以執行完,然後生成程式碼覆蓋率,否則一報錯,就不會生成程式碼覆蓋率了。
Jacoco生成內容
我們可以在你的專案中 /target/site/jacoco/index.html 找到程式碼覆蓋率
開啟後如上圖, 紅色程式碼沒有覆蓋到的程式碼,綠色代表已經覆蓋到的程式碼。
因為我這個是學習Jacoco,就寫了一個測試service的測試用例,所以覆蓋的很少。
可以從圖中看到,service業務層覆蓋率已經到達了69%。我們點進去再看看
我們可以很清晰的看到,哪一個類被覆蓋到了,哪一個類沒有被覆蓋到,很好的提醒我們,接下來的測試案例應該怎麼寫。
點進去甚至可以看到哪一行沒有被覆蓋到,十分的強大。
附錄
單元測試的基本目標: 語句覆蓋率達到 70% ;核心模組的語句覆蓋率和分支覆蓋率都 要達到 100%
不要對單元測試存在如下誤解:
-
那是測試同學乾的事情。本文是開發手冊,凡是本文內容都是與開發同學強相關的。
-
單元測試程式碼是多餘的。汽車的整體功能與各單元部件的測試正常與否是強相關的。
-
單元測試程式碼不需要維護。一年半載後,那麼單元測試幾乎處於廢棄狀態。
-
單元測試與線上故障沒有辯證關係。好的單元測試能夠最大限度地規避線上故障。