1 為什么要關注測試覆蓋率
? ? 覆蓋率是程序編程的最后一環,單元測試驗證代碼,而覆蓋率驗證測試用例。
? ?代碼覆蓋率常常被拿來作為衡量測試好壞的指標
? ?開發關注覆蓋率是為了更加深入的測試代碼,不留死角,避免隱藏bug的出現
? ?在對外說“代碼很牛,沒有bug”的時候,說服別人需要有數據
2 jacoco是什么
JaCoCo是一個開源的覆蓋率工具(官網地址: http://www.eclemma.org/JaCoCo/ ),
它針對的開發語言是java。
實現:使用asm動態修改字節碼,在代碼中進行打樁,從而進行統計。
模式:插件模式、命令行模式
使用:1 執行測試用例的時候使用jacoco參數,會生成覆蓋率分析文件。2 使用jacoco命令根據exec文件生成覆蓋率報告。
數據指標:
指令級覆蓋(Instructions,C0coverage)
分支(Branches,C1coverage)
圈復雜度(CyclomaticComplexity)
行覆蓋(Lines)
方法覆蓋(non-abstract methods)
類覆蓋(classes)
3? 怎樣分析測試覆蓋率
IDE方式、gradle、jenkins持續集成
IDE方式:IDEA內部實現了測試覆蓋率的插件,使用方便
在Run/Debug configuration界面中的Code Coverage tab頁中進行配置,在2、3處可以自定義分析類或者包。
使用gradle插件
在目前的項目使用的是gradle構建工具,項目中使用了java、jacoco插件,tasks中有jacoco默認的任務jacocoTestReport。運行該任務的前提是要執行test任務,即要執行測試用例。
jenkins插件方式
先執行測試用例,再執行sonar靜態分析,如果靜態分析不通過,則本次構建失敗;如果sonar通過,則jacoco分析.exec文件,得出覆蓋率。
覆蓋率文件(執行測試用例之后會生成)
class文件路徑
java源文件路徑(如果找不到,看不到具體的代碼覆蓋信息)
分析的java代碼路徑
排除的java文件
構建的指標(max、min)
構建失敗指標
4 檢測有意義的代碼
檢測的代碼:
服務實現類
工具類
線程相關類
不用檢測的代碼:
entity類
數據庫操作類
異常定義類
常量類
枚舉
VO等
生成的代碼
5 如何提升測試覆蓋率
多寫測試用例