JaCoCo 测试覆盖率组件

zjc 于 2026-08-09 发布

JaCoCo 用来生成单元测试覆盖率报告。它不能证明系统没有缺陷,但能回答另一个问题:这些测试到底执行了哪些代码。

一、父 POM 统一接入

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>prepare-agent</id>
            <goals><goal>prepare-agent</goal></goals>
        </execution>
        <execution>
            <id>report</id>
            <phase>test</phase>
            <goals><goal>report</goal></goals>
        </execution>
    </executions>
</plugin>

https://github.com/springvortex/spring-cloud-alibaba/blob/release/v1.0.0/pom.xml

测试前注入 agent,测试阶段生成报告,所有子模块共享同一套规则。

二、看报告要看路径

覆盖率报告比一个总分更有价值:

  1. 核心业务分支是否被测试触达。
  2. 异常路径是否被覆盖。
  3. 大段未覆盖代码是风险还是配置代码。
  4. 高覆盖测试是否只是执行了代码而没有断言。

三、与 Surefire 配合

项目在 Surefire 中使用 @{argLine} 晚绑定,保留 JaCoCo 注入的 agent 参数,同时加入 JDK 21 动态 agent 相关参数。插件配置顺序不当,覆盖率可能悄悄变成 0。

四、避坑点

  1. 不要为了覆盖率写无意义测试。
  2. 覆盖率 100% 不等于所有行为正确。
  3. 集成测试和单元测试的覆盖语义不同。
  4. 报告要和构建产物一起归档,否则查历史时会缺证据。

五、经验总结

JaCoCo 是测试证据生成器。它帮助找到盲区,但测试质量仍然取决于断言和场景设计。