一段时间以来,我一直在尝试安静地运行 Jacoco 测试覆盖。我已经尝试了这些主题中报告的几种可能的解决方案:
使用 JaCoCo Gradle 插件的 Android 测试代码覆盖率
如何使用 Android gradle 插件 0.10.0 或更高版本获取 jacoco 覆盖率报告?
我使用 genymotion 在仿真设备中运行测试。这是我添加到 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 页面。
我目前正在使用带有最新 gradle 版本的 Android Studio v1.0.2。我对 gradle 相当陌生,所以我可能在这里遗漏了一些基本的东西。
谢谢