我一直在命令行使用Gradle在我的Android项目上运行我的代码覆盖率报告,使用以下命令:
./gradlew createDebugCoverageReport
这样可以生成一个报告,其中包含整个项目中的几乎所有包,包括第三方库。我想配置覆盖率报告,以提供有关我的代码的信息。如何设置代码路径,包括和排除由Android Studio工具链生成的内置覆盖率报告中的Jacoco报告?
我的构建脚本中没有包含任何Jacoco插件,我只是在调试buildType中添加了testCoverageEnabled true
。
谢谢!
答案 0 :(得分:4)
您想要执行以下操作:
gradlew testDebug
gradlew connectedDebugAndroidTest
gradlew createDebugCoverageReport
申请testCoverageEnabled
:
android {
buildTypes {
debug {
testCoverageEnabled true
}
}
}
申请includeNoLocationClasses
:
android {
testOptions {
unitTests.all {
jacoco {
includeNoLocationClasses = true
}
}
}
}
现在您可以创建如下任务:
apply plugin: 'jacoco'
task jacocoTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest', 'createDebugCoverageReport']) {
reports {
xml.enabled = true
html.enabled = true
}
def fileFilter = ['**/R.class', '**/R$*.class', '**/BuildConfig.*', '**/Manifest*.*', '**/*Test*.*', 'android/**/*.*']
def debugTree = fileTree(dir: "${buildDir}/intermediates/classes/debug", excludes: fileFilter)
def mainSrc = "${project.projectDir}/src/main/java"
sourceDirectories = files([mainSrc])
classDirectories = files([debugTree])
executionData = fileTree(dir: "$buildDir", includes: [
"jacoco/testDebugUnitTest.exec",
"outputs/code-coverage/connected/*coverage.ec"
])
}
并运行它:
gradle clean jacocoTestReport