Gradle 8.13:如何让JaCoCo插件纳入集成测试任务覆盖数据
Gradle JaCoCo 集成测试与单元测试覆盖率合并配置
针对Gradle 8.13版本,要让自定义的integrationTest任务生成覆盖率数据,并和默认test任务的覆盖率合并成统一报告,按以下步骤配置:
1. 给集成测试任务开启JaCoCo覆盖率收集
直接给已注册的integrationTestTask配置JaCoCo,指定覆盖率数据输出文件:
integrationTestTask.configure { jacoco { // 自定义输出路径,默认也会在build/jacoco下生成integrationTest.exec destinationFile = layout.buildDirectory.file("jacoco/integrationTest.exec").get().asFile } }
2. 创建合并覆盖率的统一报告任务
注册一个新的JaCoCo报告任务,把test和integrationTest的覆盖率数据合并,并生成报告:
val jacocoMergedReport = tasks.register<JacocoReport>("jacocoMergedReport") { // 指定要合并的两个任务的覆盖率数据文件 executionData( tasks.test.get().jacoco.destinationFile, integrationTestTask.get().jacoco.destinationFile ) // 关联主源码集,和默认test任务的分析范围保持一致 sourceSets(sourceSets.main.get()) // 配置输出的报告格式,按需开启 reports { html.required.set(true) // HTML报告默认路径:build/reports/jacoco/jacocoMergedReport/html xml.required.set(true) // 用于CI工具解析的XML报告 csv.required.set(false) // 不需要CSV的话可以关闭 } }
3. 配置任务执行顺序
确保test和integrationTest都执行完成后,再生成合并报告。还可以让check任务依赖这个合并报告,这样执行./gradlew check时会自动生成统一覆盖率:
// 合并报告任务必须等test和integrationTest完成后再执行 jacocoMergedReport.configure { dependsOn(tasks.test, integrationTestTask) } // 可选:让check任务触发合并报告生成 tasks.check.configure { dependsOn(jacocoMergedReport) }
子项目配置注意事项
如果只有部分子项目有integrationTest任务,可在子项目的build.gradle.kts中单独配置上述逻辑,或者在根项目中批量处理:
// 根项目build.gradle.kts中针对有integrationTest任务的子项目配置 subprojects { plugins.withId("jacoco") { val integrationTestTask = tasks.findByName("integrationTest") as? Test integrationTestTask?.let { task -> task.jacoco { destinationFile = layout.buildDirectory.file("jacoco/integrationTest.exec").get().asFile } val mergedReport = tasks.register<JacocoReport>("jacocoMergedReport") { executionData(tasks.test.get().jacoco.destinationFile, task.jacoco.destinationFile) sourceSets(sourceSets.main.get()) reports { html.required.set(true) } } mergedReport.configure { dependsOn(tasks.test, task) } tasks.check.configure { dependsOn(mergedReport) } } } }
内容的提问来源于stack exchange,提问作者Harold L. Brown
相关产品推荐
相关产品推荐

