看了阿里開發手冊 「單元測試第八條的推薦」 html
單元測試的基本目標:語句覆蓋率達到 70% ;核心模塊的語句覆蓋率和分支覆蓋率都
要達到 100%less
以前在公司實習的時候,組內一個老哥對這個測試十分的看重,幾乎要達到100%的覆蓋面積。maven
我當時特別的不是很理解,感受本身測試下每一個分支就行了,不用搞的那麼複雜,後期又難以維護。單元測試
後來漸漸發覺,這是對本身代碼的不負責任,也是對用戶不負責任學習
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團隊根據多年來使用和集成現有庫的經驗教訓建立。spa
這是其官網介紹,也就是說,這個插件能夠檢測到你寫了多少個測試。插件
而這些測試又對你的代碼覆蓋了多少code
首先在Maven中引入一下插件htm
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能夠執行完,而後生成代碼覆蓋率,不然一報錯,就不會生成代碼覆蓋率了。
咱們能夠在你的項目中 /target/site/jacoco/index.html 找到代碼覆蓋率
打開後如上圖,紅色代碼沒有覆蓋到的代碼,綠色表明已經覆蓋到的代碼。
由於我這個是學習Jacoco,就寫了一個測試service的測試用例,因此覆蓋的不多。
能夠從圖中看到,service業務層覆蓋率已經到達了69%。咱們點進去再看看
咱們能夠很清晰的看到,哪個類被覆蓋到了,哪個類沒有被覆蓋到,很好的提醒咱們,接下來的測試案例應該怎麼寫。
點進去甚至能夠看到哪一行沒有被覆蓋到,十分的強大。
不要對單元測試存在以下誤解:
那是測試同窗乾的事情。本文是開發手冊,凡是本文內容都是與開發同窗強相關的。
單元測試代碼是多餘的。汽車的總體功能與各單元部件的測試正常與否是強相關的。
單元測試代碼不須要維護。一年半載後,那麼單元測試幾乎處於廢棄狀態。
單元測試與線上故障沒有辯證關係。好的單元測試可以最大限度地規避線上故障。