You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:06:55