Jacoco
在聊到單元測試覆蓋率的時候,基本上都會使用jacoco
做覆蓋率檢測,但通過集成發現與Powermock
有兼容性問題。
對於Powermock
上使用@PrepareForTest
的類,都無法檢測覆蓋率。導致覆蓋率幾乎爲0。
Powermock
的開發者也表明是由於底層實現邏輯上,與jacoco
衝突導致的。計劃未來去解決該問題。
jacoco
提供了一種靜態的代碼覆蓋率檢測,但搞了很久,使用gradle
一直沒有跑通,最後放棄。
Cobertra
該工具也是一個覆蓋率檢測工具。有開發者提供了Gradle
的支持。
https://github.com/stevesaliman/gradle-cobertura-plugin
對於老版本的gradle
,無需做任何改變,按照流程集成就好了。
新版本由於class的存放路徑發生了變化,所以需要修改一下。最終我的gradle
修改如下:
ext {
target = "${project.buildDir.path}/intermediates/javac/360-sydDebug/compile360-sydDebugJavaWithJavac/classes"
}
apply plugin: 'net.saliman.cobertura'
cobertura {
androidVariant = "360-sydDebug"
coverageFormats = ["xml"]
auxiliaryClasspath = files(target)
coverageIncludes = [".*com.xxxx.*"]
}
集成之後,只需要運行./gradlew app:cobertra
即可。