Gradle 4.6+JUnit5项目Jacoco测试覆盖率报告为空求最小示例
最小可运行Gradle 4.6 + JUnit 5 + Jacoco示例
先看完整的项目目录结构:
├── build.gradle └── src ├── main │ └── java │ └── com │ └── example │ └── Calculator.java └── test └── java └── com └── example └── CalculatorTest.java
1. build.gradle 核心配置
Gradle 4.6本身不内置JUnit 5支持,同时要确保Jacoco和测试任务正确绑定,以下配置直接解决覆盖率报告为空的问题:
plugins { id 'java' id 'jacoco' // 引入JUnit官方插件来兼容Gradle 4.6对JUnit 5的支持 id 'org.junit.platform.gradle.plugin' version '1.3.2' } repositories { jcenter() // Gradle 4.6常用仓库,替换为mavenCentral也可 } dependencies { // JUnit 5依赖版本需与平台插件版本匹配 testImplementation 'org.junit.jupiter:junit-jupiter-api:5.3.2' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.3.2' } // 配置JUnit平台,指定只执行JUnit Jupiter引擎的测试 junitPlatform { filters { engines { include 'junit-jupiter' } } } // 确保Jacoco报告依赖测试任务,同时显式关联源文件避免路径解析问题 jacocoTestReport { dependsOn test // 先执行测试再生成报告 reports { html.enabled = true // HTML报告默认路径:build/reports/jacoco/test/html xml.enabled = true } sourceSets sourceSets.main } // 给测试任务启用Jacoco覆盖率收集 test { jacoco { enabled = true } }
2. 主业务代码 (Calculator.java)
package com.example; public class Calculator { public int add(int a, int b) { return a + b; } public int subtract(int a, int b) { return a - b; } }
3. JUnit 5测试类 (CalculatorTest.java)
package com.example; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; public class CalculatorTest { private final Calculator calculator = new Calculator(); @Test void testAdd() { assertEquals(5, calculator.add(2, 3)); } // 故意留subtract方法未测试,方便在报告中查看未覆盖代码 }
4. 运行步骤
在项目根目录执行命令:
./gradlew clean test jacocoTestReport
执行完成后,打开 build/reports/jacoco/test/html/index.html 就能看到完整报告:add方法100%覆盖,subtract方法完全未覆盖,说明报告正常工作。
你的报告为空的常见原因
- Gradle 4.6不内置JUnit 5支持,若未配置JUnit平台插件,测试根本没执行,自然无覆盖率数据
- Jacoco报告任务未依赖测试任务,或源文件路径未正确关联,导致生成报告时无测试数据
这个示例已经规避了这些问题,直接复用即可。
内容的提问来源于stack exchange,提问作者halber
相关产品推荐
相关产品推荐

