代碼測試覆蓋率

寫在前頭

看了阿里開發手冊 「單元測試第八條的推薦」 html

單元測試的基本目標:語句覆蓋率達到 70% ;核心模塊的語句覆蓋率和分支覆蓋率都
要達到 100%less

以前在公司實習的時候,組內一個老哥對這個測試十分的看重,幾乎要達到100%的覆蓋面積。maven

我當時特別的不是很理解,感受本身測試下每一個分支就行了,不用搞的那麼複雜,後期又難以維護。單元測試

後來漸漸發覺,這是對本身代碼的不負責任,也是對用戶不負責任學習

 

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團隊根據多年來使用和集成現有庫的經驗教訓建立。spa

這是其官網介紹,也就是說,這個插件能夠檢測到你寫了多少個測試。插件

而這些測試又對你的代碼覆蓋了多少code

 

Jacoco用法

首先在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能夠執行完,而後生成代碼覆蓋率,不然一報錯,就不會生成代碼覆蓋率了。

 

Jacoco生成內容

 

咱們能夠在你的項目中 /target/site/jacoco/index.html  找到代碼覆蓋率

打開後如上圖,紅色代碼沒有覆蓋到的代碼,綠色表明已經覆蓋到的代碼。

由於我這個是學習Jacoco,就寫了一個測試service的測試用例,因此覆蓋的不多。

能夠從圖中看到,service業務層覆蓋率已經到達了69%。咱們點進去再看看

咱們能夠很清晰的看到,哪個類被覆蓋到了,哪個類沒有被覆蓋到,很好的提醒咱們,接下來的測試案例應該怎麼寫。

 

點進去甚至能夠看到哪一行沒有被覆蓋到,十分的強大。

 

附錄

單元測試的基本目標:語句覆蓋率達到 70% ;核心模塊的語句覆蓋率和分支覆蓋率都 要達到 100%

不要對單元測試存在以下誤解:

  • 那是測試同窗乾的事情。本文是開發手冊,凡是本文內容都是與開發同窗強相關的。

  • 單元測試代碼是多餘的。汽車的總體功能與各單元部件的測試正常與否是強相關的。

  • 單元測試代碼不須要維護。一年半載後,那麼單元測試幾乎處於廢棄狀態。

  • 單元測試與線上故障沒有辯證關係。好的單元測試可以最大限度地規避線上故障。

相關文章
相關標籤/搜索