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 VerificationType 屬性;值是固定的。

有關使用 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 建立一個名為 testCodeCoverageReportJacocoCoverageReport 類型報告。為方便起見,使用 TestSuiteType 類別中的常數值設定 TestType。任何字串值都是可以接受的。

報告建立會自動建立後端任務,以彙總給定測試套件類型值的涵蓋率結果。

相依性管理

JaCoCo 報告彙總外掛程式會新增下列相依性設定

表格 1. JaCoCo 報告彙總外掛程式 - 相依性設定
名稱 意義

jacocoAggregation

用於宣告所有專案相依性,這些相依性具有要彙總的程式碼涵蓋率資料。

aggregateCodeCoverageReportResults

使用 變異感知比對 來使用 jacocoAggregation 設定中的專案相依性,以找出適當的測試套件類型。

如果專案也套用 jvm-test-suite 外掛程式,則不需要明確將相依性新增到 jacocoAggregation 設定。