你可以在支持 Gradle 的 IDE 中打开这个示例。

这个示例展示了如何使用 JaCoCo 聚合多个 Java 子项目的代码覆盖率。 jacoco-report-aggregation 插件 当应用于分发项目(例如 Android 应用程序或 WAR 子项目)时,提供了此功能。

此示例中的项目包含三个项目:applicationlistutilities。 所有这三个项目都应用了 jacoco 插件,并且 application 在其 implementation 配置中使用了 listutilitiesapplication 子项目是此软件项目的最终分发版本,并应用了 jacoco-report-aggregation 来执行代码覆盖率聚合。

Test Report Aggregation 插件目前不适用于 com.android.application 插件。
application/build.gradle.kts
plugins {
    id("myproject.java-conventions")
    application
    id("jacoco-report-aggregation") (1)
}

dependencies {
    implementation(project(":list"))
    implementation(project(":utilities"))
}

application {
    mainClass = "org.gradle.sample.Main"
}

tasks.check {
    dependsOn(tasks.named<JacocoReport>("testCodeCoverageReport")) (2)
}
application/build.gradle
plugins {
    id 'myproject.java-conventions'
    id 'application'
    id 'jacoco-report-aggregation' (1)
}

dependencies {
    implementation project(':list')
    implementation project(':utilities')
}

application {
    mainClass = 'org.gradle.sample.Main'
}

tasks.named('check') {
    dependsOn tasks.named('testCodeCoverageReport', JacocoReport) (2)
}

如果存在 jvm-test-suite 插件,则 application 项目不需要额外的配置。

1 应用 jacoco-report-aggregation 插件
2 可选:使 JaCoCo 聚合报告生成成为 'check' 生命周期阶段的一部分

报告聚合逻辑不会自动检查所有子项目的覆盖率数据以进行聚合。 相反,将选择分发项目的运行时类路径的直接和传递项目项目依赖项以进行潜在的聚合。

对于名为 'test' 的默认测试套件,不需要额外的配置。 聚合报告及其 JacocoReport 类型的支持任务是基于 application 项目中存在的测试套件合成的。 具有相同 testType 属性的测试套件将被聚合。

运行测试并生成报告

$ ./gradlew testCodeCoverageReport

BUILD SUCCESSFUL
25 actionable tasks: 25 executed

XML 和 HTML 报告现在可以在 application/build/reports/jacoco/testCodeCoverageReport 下找到。

有关更多信息,请参阅 Java 项目中的测试章节