You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 22:55:10