我一直试图在一段时间内安静地进行Jacoco测试覆盖 . 我在这些主题中尝试了几种可能的解决方案:
Android test code coverage with JaCoCo Gradle plugin
How do I get a jacoco coverage report using Android gradle plugin 0.10.0 or higher?
我使用genymotion在一个emulatated设备中运行测试 . 这是我添加到build.gradle的内容:
apply plugin: 'jacoco'
android{
jacoco {
version "0.7.1.201405082137"
}
buildTypes{
debug{
testCoverageEnabled = true
}
}
}
jacoco {
toolVersion "0.7.1.201405082137"
}
为了运行它,我使用类似的东西
./gradlew clean
./gradlew createFLAVOR_NAMEDebugCoverageReport
相关生成的文件/文件夹是:
/build/intermediates/coverage-instrumented-classes
/build/intermediates/jacoco
/build/outputs/code-coverage/connected/flavors/MyFlavor/coverage.ec
但是,没有@ build / reports / jacoco / test / html / index.html或任何html页面/代码覆盖率报告@ / build / outputs .
我还尝试创建一个专门的任务来构建一个覆盖率报告:
def coverageSourceDirs = [
'src/main/java',
]
task jacocoTestReport(type: JacocoReport, dependsOn: "connectedAndroidTestFLAVOR_NAMEDebug") {
group = "Reporting"
description = "Generate Jacoco coverage reports after running tests."
reports {
xml.enabled = true
html.enabled = true
}
classDirectories = fileTree(
dir: './build/intermediates/classes/debug',
excludes: ['**/R*.class',
'**/*$InjectAdapter.class',
'**/*$ModuleAdapter.class',
'**/*$ViewInjector*.class'
])
sourceDirectories = files(coverageSourceDirs)
executionData = files("$buildDir/jacoco/connectedAndroidTestMyFlavorDebug.exec")
// Bit hacky but fixes https://code.google.com/p/android/issues/detail?id=69174.
// We iterate through the compiled .class tree and rename $$ to $.
doFirst {
new File("$buildDir/intermediates/classes/").eachFileRecurse { file ->
if (file.name.contains('$$')) {
file.renameTo(file.path.replace('$$', '$'))
}
}
}
}
然后 ./gradlew clean 和 ./gradlew jacocoTestReport . 输出与上面相同,因此,没有带覆盖报告的html页面或任何其他覆盖文件 .
我目前正在使用Android Studio v1.0.2和最新的gradle版本 . 我是一个相当新的gradle,所以我可能会遗漏一些基本的东西 .
谢谢
2 回答
在花了一整天追逐这个问题后,我发现's the problem. Contrary to the examples i'看到testDebug构建生成的文件不是.exec文件@991768_ .
使用我的gradle和studio版本生成的文件是.ec @ build/outputs/code-coverage/connected/flavors/myFlavor/coverage.ec
我没有找到任何与此相关的相关信息 . 然而,这可能是最近的更改,通过创建自定义JacocoReport任务并相应地更改executionData变量我已经解决了问题 . 这是我的实施:
使用Jacoco和Android Flavors的测试覆盖率报告:
让我们考虑一下名为“免费”和“付费”的口味
./gradlew清洁组装
./gradlew testFreeDebugUnitTestCoverage
它应该在终端给出成功消息,现在转到目录
最好的运气!