我正在使用 jacoco 进行代码覆盖。它运行良好 (./gradlew createDebugCoverageReport
) 并为所有 androidTest
案例生成代码覆盖率。但是,它不运行本地单元测试,因此不计算这些测试的代码覆盖率。我怎样才能实现所有测试用例,包括本地运行和所有代码覆盖。我不确定我错过了什么。任何指针都会很棒。
我可以使用 ./gradlew testDebugUnitTest
在 JVM 上成功运行所有本地单元测试
如果需要更多信息,请告诉我。
最佳答案
Android Studio Chipmunk 和 Gradle 7.3.3 的更新答案
这是项目级别的gradle
buildscript {
dependencies {
classpath 'org.jacoco:org.jacoco.core:0.8.7'
}
}
这些在模块级别的gradle中
plugins {
id 'jacoco'
}
android {
buildTypes {
debug {
testCoverageEnabled true
}
}
tasks.withType(Test) {
jacoco {
includeNoLocationClasses = true
excludes = ['jdk.internal.*']
}
}
}
最后,运行测试的任务。
task jacocoTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest', 'createDebugCoverageReport']) {
reports {
xml.getRequired().set(true)
html.getRequired().set(true)
}
def fileFilter = [
'**/R.class',
'**/R$*.class',
'**/BuildConfig.*',
'**/Manifest*.*',
'**/*Test*.*',
'android/**/*.*'
]
def debugTree = fileTree(
dir: "$project.buildDir/tmp/kotlin-classes/debug",
excludes: fileFilter
)
def mainSrc = "$project.projectDir/src/main/java"
sourceDirectories.from(files([mainSrc]))
classDirectories.from(files([debugTree]))
executionData.from(fileTree(
dir: "$buildDir",
includes: [
"outputs/unit_test_code_coverage/debugUnitTest/testDebugUnitTest.exec",
"outputs/code_coverage/debugAndroidTest/connected/*/coverage.ec"
]
))
}
"$project.buildDir/tmp/kotlin-classes/debug"
适用于 Kotlin。对于 Java,更改为 "$project.buildDir/intermediates/classes/debug"
。
testDebugUnitTest
运行单元测试并在 "outputs/unit_test_code_coverage/debugUnitTest/testDebugUnitTest.exec"
中创建覆盖率报告。
请注意,路径可能不同。我在应用程序文件夹中搜索“exec”找到了它。
createDebugCoverageReport
运行 Android 测试并在 "outputs/code_coverage/debugAndroidTest/connected/*/coverage.ec"
中创建覆盖率报告。请注意,此路径也可能不同。我在应用程序文件夹中搜索“coverage.ec”找到了它。
最后,要运行测试并创建覆盖率报告,您可以创建运行配置以运行“clean jacocoTestReport”或在 Android Studio 中按 ctrl 两次并运行“./gradlew clean jacocoTestReport”,这将为您创建运行配置.
关于java - Gradle CreateDebugCoverageReport 不运行本地单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38249722/