在我的android项目中,jacoco不包括robolectic测试。我可以使用jacoco获得android espresso和junit测试覆盖率,没有任何问题。
我确实看到了有关此问题的其他问题,所有答案都是升级jacoco版本。我正在使用最新的jacoco版本0.7.9
这是我的项目主build.gradle
buildscript {
dependencies {
classpath 'org.jacoco:org.jacoco.core:0.7.9'
classpath 'org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.6-rc1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
App模块构建gradle。
apply plugin: 'jacoco'
android {
testOptions {
unitTests.all {
jacoco {
includeNoLocationClasses = true
}
includeAndroidResources = true
}
}
}
答案 0 :(得分:0)
我通过在gradle中为jacoco创建单独的任务来解决这个问题。
首先,你需要添加jacoco插件。
apply plugin: "jacoco"
我没有像上面的代码片段那样添加任何依赖项。只需添加插件即可。
然后将testCoverageEnabled true param添加到buildTypes部分。
buildTypes {
debug {
testCoverageEnabled true
}
}
在这个示例中,它仅用于调试,但我相信如果您将其添加到发布版本,它也应该可以正常工作。
最后添加如下的jacoco任务;
task jacocoTestReport(type: JacocoReport, dependsOn: "testDebugUnitTest") {
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/testDebug.exec")
doFirst {
new File("$buildDir/intermediates/classes/").eachFileRecurse { file ->
if (file.name.contains('$$')) {
file.renameTo(file.path.replace('$$', '$'))
}
}
}
}
使用该任务,您应该能够创建覆盖率报告。它将在构建文件夹中导出html格式的覆盖率报告。 有关详细信息,请查看this tutorial。