JaCoCo 插件目前还是孵化中状态。请务必注意,在以后的 Gradle 版本中,DSL 和其他配置可能会有所改变。
JaCoCo 插件通过集成 JaCoCo为 Java 代码提供了代码覆盖率指标。
要想开始,请将 JaCoCo 插件应用于你想要计算代码覆盖率的项目中。
应用 JaCoCo 插件
build.gradle
apply plugin: "jacoco"
如果 Java 插件也被应用于你的项目,那么会创建一个名为 jacocoTestReport 的新任务,该新任务依赖于 test 任务。该报告可以在 $buildDir/reports/jacoco/test 中看到。默认情况下,会生成一个 HTML 报告。
JaCoCo 插件添加一个名为 jacoco 类型为 JacocoPluginExtension 的 project 扩展,这个扩展允许在你的构建中配置 JaCoCo 所使用的默认值。
配置 JaCoCo 插件设置
build.gradle
jacoco
toolVersion = "0.6.2.201302030002"
reportsDir = file("$buildDir/customJacocoReportDir")
}
表 34.1. JaCoCo 属性的 Gradle 默认值
Property | Gradle 默认值 |
reportsDir | "$buildDir/reports/jacoco" |
JacocoReport 任务可以用于生成不同格式的代码覆盖率报告。它实现了标准的 Gradle 类型 Reporting,并呈现了一个 JacocoReportsContainer 类型的报告容器。
配置测试任务
build.gradle
jacocoTestReport {
reports
xml.enabled false
csv.enabled false
html.destination "${buildDir}/jacocoHtml"
}
}
JaCoCo 插件添加了一个 JacocoTaskExtension 扩展到 Test 类型的所有任务中。该扩展允许配置 JaCoCo 中的测试任务的一些特定属性。
配置测试任务
build.gradle
test {
jacoco
append = false
destinationFile = file("$buildDir/jacoco/jacocoTest.exec")
classDumpFile = file("$buildDir/jacoco/classpathdumps")
}
}
表 34.2. JaCoCo 任务扩展的默认值
Property | Gradle 默认值 |
enabled | true |
destPath | $buildDir/jacoco |
append | true |
includes | [] |
excludes | [] |
excludeClassLoaders | [] |
sessionId |
auto-generated
|
dumpOnExit |
true
|
output |
Output.FILE
|
address |
-
|
port |
-
|
classDumpPath |
-
|
jmx |
false
|
虽然 Test 的所有任务会在 java 插件被配置使用时会自动增强以提供覆盖率信息,但是任何实现了 JavaForkOptions 的任务都可以通过 JaCoCo 插件得到增强。也就意味着,任何 fork Java 进程的任务都可以用于生成覆盖率信息。
例如,你可以配置您的构建使用 application 插件来生成代码覆盖率。
使用 application 插件来生成代码覆盖率数据
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 的二进制分发包及源代码分发包中的 samples/testing/jacoco/application 中找到。
由 applicationCodeCoverageReport 生成的覆盖率报告
构建布局
application
build
jacoco
run.exec
reports/jacoco/applicationCodeCoverageReport/html/
index.html
对于同时也配置使用了 Java 插件的项目,JaCoCo 插件会自动添加以下任务:
表 34.3. JaCoCo 插件 - 任务
任务名称 | 依赖于 | 类型 | 描述 |
jacocoTestReport
|
- | JacocoReport | 为测试任务生成代码覆盖率报告。 |
JaCoCo 插件添加了下列的依赖配置:
表 34.4. JaCoCo 插件 - 依赖配置
名称 | 意义 |
jacocoAnt
|
用于运行JacocoMerge 任务的
JaCoCo Ant 库。 |
jacocoAgent
|
用于测试位于test下的代码的 JaCoCo 客户端库。 |