java 单元测试覆盖率通常通过 jacoco 插件统计,具体做法是在构建工具(如 maven)中配置 jacoco 插件并执行测试目标。运行 mvn test 后,jacoco 会自动生成包含行覆盖率、分支覆盖率的 html 报告,位于 target/site/jacoco 目录下。

Maven 项目中如何集成 JaCoCo 插件
在 Maven 项目的 pom.xml 文件中添加 JaCoCo 插件配置即可实现自动化统计。需要在 build/plugins 节点下声明插件坐标,并指定版本。配置完成后,执行 mvn verify 或 mvn test 命令,插件会在测试阶段收集数据并在验证阶段生成报告。

<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.11</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>verify</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
上述配置中,prepare-agent 目标负责在 JVM 启动时注入代理程序以收集覆盖率数据,report 目标则负责将收集到的二进制数据转换为可读的 HTML 报告。执行 mvn verify 后,控制台会输出类似 [INFO] Coverage: lines=85%, branches=60% 的摘要信息,同时生成详细的 HTML 文件供开发者查看。
立即学习“Java免费学习笔记(深入)”;
Gradle 项目中如何配置覆盖率统计
在 Gradle 项目中,可以使用官方的 jacoco 插件来统计覆盖率。需要在 build.gradle 文件中应用该插件,并配置测试任务以启用 JaCoCo 分析。与 Maven 类似,Gradle 也会在测试执行过程中拦截字节码注入代理,并在任务结束后生成报告。

plugins {
id 'java'
id 'jacoco'
}
test {
finalizedBy 'jacocoTestReport'
}
jacocoTestReport {
dependsOn test
reports {
xml.required = false
html.required = true
}
}
在 build.gradle 示例中,test 任务被配置为在执行完毕后自动触发 jacocoTestReport 任务。这种链式调用确保了每次运行测试后都会立即生成最新的覆盖率报告。生成的报告默认位于 build/reports/jacoco/test/html/index.html,开发者可以直接打开该文件查看每个类的具体覆盖情况。
如何排除特定类或方法不参与覆盖率统计
在实际项目中,某些代码如 DTO、Getter/Setter 或配置类通常不需要测试覆盖,可以通过 JaCoCo 的排除规则忽略这些部分。在 Maven 中,可以在插件配置中添加 excludes 列表;在 Gradle 中,可以配置 classDirectories 来过滤类文件。这有助于提高有效覆盖率指标,避免无关代码拉低整体评分。
<configuration>
<excludes>
<exclude>**/dto/**</exclude>
<exclude>**/entity/**</exclude>
<exclude>**/*Config.class</exclude>
</excludes>
</configuration>
通过在配置中添加 **/dto/** 和 **/entity/** 等通配符规则,JaCoCo 会在计算覆盖率时自动跳过匹配的文件。这样生成的报告中,这些类的覆盖率将被视为 100% 或不计入分母,从而更准确地反映业务逻辑代码的测试质量。开发者可以根据项目结构灵活调整排除规则,确保核心业务逻辑得到充分测试。


















