我一直在使用 Jacoco 生成代码覆盖率报告,并且运行良好。我的项目包含使用 JUnit5 的单元测试。我正在使用“de.mannodermaus.android”插件在 JUnit5 中编写测试。
最近我更新了以下依赖项-
App的Build.gradle文件 -
apply from: '../jacoco-config.gradle'
apply plugin: "de.mannodermaus.android-junit5"
androidTestImplementation "de.mannodermaus.junit5:android-test-core:1.3.0"
androidTestRuntimeOnly "de.mannodermaus.junit5:android-test-runner:1.3.0"
// (Required) Writing and executing Unit Tests on the JUnit Platform
testImplementation "org.junit.jupiter:junit-jupiter-api:5.8.2"
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:5.8.2"
// (Optional) If you need "Parameterized Tests"
testImplementation "org.junit.jupiter:junit-jupiter-params:5.8.2"
// (Optional) If you also have JUnit 4-based tests
testRuntimeOnly "org.junit.vintage:junit-vintage-engine:5.8.2"
testImplementation "junit:junit:4.13.2"
项目级Build.gradle文件 -
classpath "org.jacoco:org.jacoco.core:0.8.8"
classpath "de.mannodermaus.gradle.plugins:android-junit5:1.8.2.1"
我已经创建了一个 gradle 文件来应用 Jacoco 的更改和设置。该文件包含以下主要内容。
jacoco-config.gradle
apply plugin: 'jacoco'
tasks.withType(Test) {
jacoco.includeNoLocationClasses = true
jacoco.excludes = ['jdk.internal.*']}
jacoco {
toolVersion = "0.8.8"
reportsDir = file("$buildDir/JacocoReport")}
android {
buildTypes {
debug {
testCoverageEnabled = true
}
}
testOptions {
animationsDisabled true
unitTests {
includeAndroidResources = true
returnDefaultValues = true
}
}
}
project.afterEvaluate {
project.gradle.taskGraph.whenReady {
testDebugUnitTest {
ignoreFailures true
}
}
def androidExclusion = [
'**/BR.*',
'**/R.*',
'**/R$*.*',
'**/BuildConfig.*',
'**/Manifest*.*',
'**/databinding/*.*'
]
// Create coverage task ex: 'jacocoTestReport<Flavor>' depending on
task "jacocoTestReport"(type: JacocoReport, dependsOn: ['testDebugUnitTest']) {
group = "Reporting"
description = "Generate Jacoco coverage reports on the testDebugUnitTest build."
def javaClasses = fileTree(
dir: "${project.buildDir}/intermediates/javac/debug",
excludes: androidExclusion)
def kotlinClasses = fileTree(
dir: "${project.buildDir}/tmp/kotlin-classes/debug",
excludes: androidExclusion)
classDirectories.from = files([ kotlinClasses , javaClasses])
def coverageSourceDirs = ["src/main/java"]
getAdditionalSourceDirs().setFrom(files(coverageSourceDirs))
getSourceDirectories().setFrom(files(coverageSourceDirs))
getExecutionData().setFrom(fileTree(dir: project.projectDir, includes: ["**/*.exec", "**/*.ec"]))
reports {
xml.required = true
html.required = true
}
}
}
我已经检查了 jacoco gradle 文件的源路径和目标路径是否正确。此外,Java 和 Kotlin 的类文件路径似乎是正确的。
我正在使用 gradle 插件版本 7.2.2 和 distributionUrl 7.3.3
任何帮助表示赞赏。谢谢。