寫在前頭
看了阿里開發手冊 “單元測試第八條的推薦”
單元測試的基本目標:語句覆蓋率達到 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%。我們點進去再看看
我們可以很清晰的看到,哪一個類被覆蓋到了,哪一個類沒有被覆蓋到,很好的提醒我們,接下來的測試案例應該怎么寫。
點進去甚至可以看到哪一行沒有被覆蓋到,十分的強大。
附錄
不要對單元測試存在如下誤解:
那是測試同學干的事情。本文是開發手冊,凡是本文內容都是與開發同學強相關的。
單元測試代碼是多余的。汽車的整體功能與各單元部件的測試正常與否是強相關的。
單元測試代碼不需要維護。一年半載后,那么單元測試幾乎處於廢棄狀態。
單元測試與線上故障沒有辯證關系。好的單元測試能夠最大限度地規避線上故障。