您可以在支持 Gradle 的 IDE 中打开此示例。

此示例展示了如何使用 JaCoCo 聚合多个 Java 子项目的代码覆盖率。jacoco-report-aggregation 插件通过一个独立的实用程序项目提供此功能,该项目用于指定哪些子项目包含在聚合中。

此示例中的项目包含三个“代码”子项目:applicationlistutilities。所有这三个项目都应用了 jacoco 插件,并且 application 通过其实施配置使用 listutilities。第四个子项目 code-coverage-report 是用于收集覆盖率结果的独立实用程序项目。

测试报告聚合插件目前不适用于 com.android.application 插件。
code-coverage-report/build.gradle.kts
plugins {
    base
    id("jacoco-report-aggregation")
}

repositories {
    mavenCentral()
}

dependencies {
    jacocoAggregation(project(":application")) (1)
}

reporting {
    reports {
        val testCodeCoverageReport by creating(JacocoCoverageReport::class) { (2)
            testSuiteName = "test"
        }
    }
}

tasks.check {
    dependsOn(tasks.named<JacocoReport>("testCodeCoverageReport")) (3)
}
code-coverage-report/build.gradle
plugins {
    id 'base'
    id 'jacoco-report-aggregation'
}

repositories {
    mavenCentral()
}

dependencies {
    jacocoAggregation project(':application') (1)
}

reporting {
    reports {
        testCodeCoverageReport(JacocoCoverageReport) { (2)
            testSuiteName = "test"
        }
    }
}

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

独立项目应用 jacoco-report-aggregation,但如果 jvm-test-suite 插件也未出现,则需要额外的配置。

在这种情况下,需要两个额外的设置步骤

1 使用 jacocoAggregation 配置声明依赖
2 定义 JacocoCoverageReport 类型的报告,该报告从单元测试套件收集覆盖率数据
3 可选:使 JaCoCo 聚合报告生成成为“check”生命周期阶段的一部分

报告聚合逻辑不会自动检查所有子项目以查找要聚合的覆盖率数据。相反,将选择 jacocoAggregation 配置的直接和传递项目依赖以进行潜在的聚合。

用户还必须声明一个或多个 JacocoCoverageReport 类型的报告。每个报告实例都指定一个 testType 属性,用于匹配生成覆盖率数据的测试套件。为每个用户定义的报告合成一个 JacocoReport 任务,并执行聚合。调用此任务将导致在 jacocoAggregation 配置的依赖项目中执行测试。

运行测试并生成报告

$ ./gradlew testCodeCoverageReport

BUILD SUCCESSFUL
25 actionable tasks: 25 executed

XML 和 HTML 报告现在可以在 code-coverage-report/build/reports/jacoco/testCodeCoverageReport 下找到。

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