Gradle JaCoCo 插件

2022-08-03 16:00 更新

JaCoCo 插件目前還是孵化中狀態(tài)。請務(wù)必注意,在以后的 Gradle 版本中,DSL 和其他配置可能會有所改變。

JaCoCo 插件通過集成 JaCoCo為 Java 代碼提供了代碼覆蓋率指標(biāo)。

入門

要想開始,請將 JaCoCo 插件應(yīng)用于你想要計(jì)算代碼覆蓋率的項(xiàng)目中。

應(yīng)用 JaCoCo 插件

build.gradle

apply plugin: "jacoco"  

如果 Java 插件也被應(yīng)用于你的項(xiàng)目,那么會創(chuàng)建一個(gè)名為 jacocoTestReport 的新任務(wù),該新任務(wù)依賴于 test 任務(wù)。該報(bào)告可以在 $buildDir/reports/jacoco/test 中看到。默認(rèn)情況下,會生成一個(gè) HTML 報(bào)告。

配置 JaCoCo 插件

JaCoCo 插件添加一個(gè)名為 jacoco 類型為 JacocoPluginExtension 的 project 擴(kuò)展,這個(gè)擴(kuò)展允許在你的構(gòu)建中配置 JaCoCo 所使用的默認(rèn)值。

配置 JaCoCo 插件設(shè)置

build.gradle

jacoco
    toolVersion = "0.6.2.201302030002"
    reportsDir = file("$buildDir/customJacocoReportDir")
}  

表 34.1. JaCoCo 屬性的 Gradle 默認(rèn)值

Property Gradle 默認(rèn)值
reportsDir "$buildDir/reports/jacoco"

JaCoCo 報(bào)告配置

JacocoReport 任務(wù)可以用于生成不同格式的代碼覆蓋率報(bào)告。它實(shí)現(xiàn)了標(biāo)準(zhǔn)的 Gradle 類型 Reporting,并呈現(xiàn)了一個(gè) JacocoReportsContainer 類型的報(bào)告容器。

配置測試任務(wù)

build.gradle

jacocoTestReport {
    reports
        xml.enabled false
        csv.enabled false
        html.destination "${buildDir}/jacocoHtml"
    }
}  

JaCoCo 的特定任務(wù)配置

JaCoCo 插件添加了一個(gè) JacocoTaskExtension 擴(kuò)展到 Test 類型的所有任務(wù)中。該擴(kuò)展允許配置 JaCoCo 中的測試任務(wù)的一些特定屬性。

配置測試任務(wù)

build.gradle

test {
    jacoco
        append = false
        destinationFile = file("$buildDir/jacoco/jacocoTest.exec")
        classDumpFile = file("$buildDir/jacoco/classpathdumps")
    }
}  

表 34.2. JaCoCo 任務(wù)擴(kuò)展的默認(rèn)值

Property Gradle 默認(rèn)值
enabled true
destPath $buildDir/jacoco
append true
includes []
excludes []
excludeClassLoaders []
sessionId auto-generated
dumpOnExit true
output Output.FILE
address -
port -
classDumpPath -
jmx false

雖然 Test 的所有任務(wù)會在 java 插件被配置使用時(shí)會自動(dòng)增強(qiáng)以提供覆蓋率信息,但是任何實(shí)現(xiàn)了 JavaForkOptions 的任務(wù)都可以通過 JaCoCo 插件得到增強(qiáng)。也就意味著,任何 fork Java 進(jìn)程的任務(wù)都可以用于生成覆蓋率信息。

例如,你可以配置您的構(gòu)建使用 application 插件來生成代碼覆蓋率。

使用 application 插件來生成代碼覆蓋率數(shù)據(jù)

build.gradle

apply plugin: "application"
apply plugin: "jacoco"
mainClassName = "org.gradle.MyMain"
jacoco {
    applyTo run
}
task applicationCodeCoverageReport(type:JacocoReport){
    executionData run
    sourceSets sourceSets.main
}  

注: 此示例中的代碼可以在 Gradle 的二進(jìn)制分發(fā)包及源代碼分發(fā)包中的 samples/testing/jacoco/application 中找到。

由 applicationCodeCoverageReport 生成的覆蓋率報(bào)告

構(gòu)建布局

application
  build
    jacoco
      run.exec
    reports/jacoco/applicationCodeCoverageReport/html/
      index.html  

任務(wù)

對于同時(shí)也配置使用了 Java 插件的項(xiàng)目,JaCoCo 插件會自動(dòng)添加以下任務(wù):

表 34.3. JaCoCo 插件 - 任務(wù)

任務(wù)名稱 依賴于 類型 描述
jacocoTestReport - JacocoReport 為測試任務(wù)生成代碼覆蓋率報(bào)告。

依賴管理

JaCoCo 插件添加了下列的依賴配置:

表 34.4. JaCoCo 插件 ??- 依賴配置

名稱 意義
jacocoAnt 用于運(yùn)行JacocoMerge任務(wù)的 JaCoCo Ant 庫。
jacocoAgent 用于測試位于test下的代碼的 JaCoCo 客戶端庫。
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號