JaCoCo 报告聚合插件(插件 ID:jacoco-report-aggregation)提供了将多个 JaCoCo 代码覆盖率报告(可能跨越多个 Gradle 项目)的结果聚合到单个 HTML 报告中的功能。支持覆盖率报告的二进制数据由 Test 任务调用生成;有关更多信息,请参阅 JaCoCo 插件 章节。

用法

要使用 JaCoCo 报告聚合插件,请在您的构建脚本中包含以下内容

plugins {
    id 'jacoco-report-aggregation'
}
plugins {
    id("jacoco-report-aggregation")
}

请注意,除非与 JVM 测试套件插件 结合使用,否则此插件不会执行任何操作。 Java 插件 会自动应用 JVM 测试套件插件。

现在有两种方法可以收集跨多个子项目的代码覆盖率结果

  1. 从分发项目(例如应用程序或 WAR 子项目)→ 分发示例

  2. 使用独立项目来指定子项目→ 独立示例

示例 2 也可以用于通过根项目聚合结果。

JaCoCo 报告聚合插件目前不适用于 com.android.application 插件。

任务

当项目也应用 jvm-test-suite 插件时,会为每个测试套件添加以下任务

testSuiteCodeCoverageReportJacocoReport

依赖于:匹配以下属性的变体的工件

通过 jacocoAggregation 配置收集直接和传递项目依赖项的变体。将匹配以下属性

    - org.gradle.category              = verification   (1)
    - org.gradle.testsuite.type        = unit-test      (2)
    - org.gradle.verificationtype      = jacoco-results   (3)
1 类别属性;值为固定值。
2 TestSuiteType 属性;值从 JvmTestSuite#getTestType() 中得出。
3 验证类型属性;值为固定值。

有关使用 JaCoCo 执行测试生成的变体的更多信息,请参阅 JaCoCo 插件文档的 输出变体 部分。

报告

默认情况下,Gradle 在任何任务失败时(包括测试失败)停止执行任务。为了确保您的构建始终生成聚合报告,请在您的 Gradle 命令中指定 --continue 选项。有关更多信息,请参阅 在发生故障时继续构建

自动报告创建

当项目也应用 jvm-test-suite 插件时,会为每个测试套件添加以下报告对象

testSuiteCodeCoverageReportJacocoCoverageReport

创建一个容器来参数化 TestSuiteType 值。

手动报告创建

当项目不应用jvm-test-suite插件时,您必须手动注册一个或多个报告。

build.gradle.kts
reporting {
    reports {
        val testCodeCoverageReport by creating(JacocoCoverageReport::class) { (1)
            testType = TestSuiteType.UNIT_TEST
        }
    }
}
build.gradle
reporting {
    reports {
        testCodeCoverageReport(JacocoCoverageReport) { (1)
            testType = TestSuiteType.UNIT_TEST
        }
    }
}
1 创建一个名为testCodeCoverageReport的类型为JacocoCoverageReport的报告。为了方便起见,使用来自TestSuiteType类的常量值设置TestType。任何字符串值都是可以接受的。

报告创建会自动创建支持任务,以汇总给定测试套件类型值的覆盖率结果。

依赖管理

JaCoCo 报告聚合插件添加了以下依赖配置

表 1. JaCoCo 报告聚合插件 - 依赖配置
名称 含义

jacocoAggregation

用于声明所有项目依赖项的配置,这些依赖项具有要聚合的代码覆盖率数据。

aggregateCodeCoverageReportResults

使用变体感知匹配jacocoAggregation配置中使用项目依赖项来查找合适的测试套件类型。

如果项目也应用了jvm-test-suite插件,则无需显式将依赖项添加到jacocoAggregation配置中。