在 jacoco-maven-plugin
中,覆盖率阈值可以设置为行覆盖率(Line Coverage)和分支覆盖率(Branch Coverage),甚至可以设置类、方法、指令等不同类型的覆盖率。可以通过 check
目标对每个类型的覆盖率进行精细化控制。
行覆盖率 vs. 分支覆盖率
- 行覆盖率 (Line Coverage):表示测试执行中,代码的每一行是否被执行。
- 分支覆盖率 (Branch Coverage):表示控制流语句(如
if-else
、switch
)的所有分支是否被执行,包括 true 和 false 分支。
设置覆盖率阈值
jacoco-maven-plugin
提供了灵活的配置方式,可以针对不同类型的覆盖率(如行、分支、类等)设置阈值,并在代码未达到设定的覆盖率时使构建失败。
详细配置示例
下面是一个配置示例,包含行覆盖率和分支覆盖率的设置。
<build><plugins><plugin><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artifactId><version>0.8.10</version><executions><execution><id>prepare-agent</id><goals><goal>prepare-agent</goal></goals></execution><execution><id>report</id><goals><goal>report</goal></goals></execution><execution><id>check</id><goals><goal>check</goal></goals><configuration><rules><!-- 定义规则:检测所有的包 --><rule><element>BUNDLE</element><limits><!-- 设置行覆盖率的最低阈值 --><limit><counter>LINE</counter><value>COVEREDRATIO</value><minimum>0.80</minimum> <!-- 行覆盖率最低要求 80% --></limit><!-- 设置分支覆盖率的最低阈值 --><limit><counter>BRANCH</counter><value>COVEREDRATIO</value><minimum>0.75</minimum> <!-- 分支覆盖率最低要求 75% --></limit></limits></rule></rules></configuration></execution></executions></plugin></plugins>
</build>
解释:
-
:
LINE
:代表行覆盖率,即代码每一行的覆盖情况。BRANCH
:代表分支覆盖率,即条件语句的分支覆盖情况。
-
:
COVEREDRATIO
:表示覆盖率的比例(即已覆盖/总量)。
-
:
- 用于设定最低覆盖率的阈值,如果覆盖率低于这个值,则构建失败。
其他覆盖率类型
除了行覆盖率和分支覆盖率,jacoco-maven-plugin
还允许针对其他指标设置阈值,例如:
- INSTRUCTION:指令覆盖率(字节码指令)。
- COMPLEXITY:代码复杂度覆盖率。
- METHOD:方法覆盖率。
- CLASS:类覆盖率。
示例:
<limits><limit><counter>METHOD</counter><value>COVEREDRATIO</value><minimum>0.85</minimum> <!-- 方法覆盖率最低要求 85% --></limit><limit><counter>CLASS</counter><value>COVEREDRATIO</value><minimum>0.90</minimum> <!-- 类覆盖率最低要求 90% --></limit>
</limits>
完整配置示例(行、分支、类、方法覆盖率)
<build><plugins><plugin><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artifactId><version>0.8.10</version><executions><execution><id>prepare-agent</id><goals><goal>prepare-agent</goal></goals></execution><execution><id>report</id><goals><goal>report</goal></goals></execution><execution><id>check</id><goals><goal>check</goal></goals><configuration><rules><!-- 规则1:检测所有的包 --><rule><element>BUNDLE</element><limits><!-- 行覆盖率最低要求 80% --><limit><counter>LINE</counter><value>COVEREDRATIO</value><minimum>0.80</minimum></limit><!-- 分支覆盖率最低要求 75% --><limit><counter>BRANCH</counter><value>COVEREDRATIO</value><minimum>0.75</minimum></limit><!-- 方法覆盖率最低要求 85% --><limit><counter>METHOD</counter><value>COVEREDRATIO</value><minimum>0.85</minimum></limit><!-- 类覆盖率最低要求 90% --><limit><counter>CLASS</counter><value>COVEREDRATIO</value><minimum>0.90</minimum></limit></limits></rule></rules></configuration></execution></executions></plugin></plugins>
</build>
使用技巧和最佳实践
-
动态调整阈值:根据项目的不同阶段和实际需要,可以动态调整不同的覆盖率阈值。例如,在早期项目中可能会设定较低的覆盖率要求(如 50%),随着项目的成熟再提高到 80% 或更高。
-
逐步提升覆盖率:如果项目初期覆盖率不高,可以逐步提升覆盖率标准,使用工具如 SonarQube 或 CI 系统来监控覆盖率的提升过程。
-
排除不必要的类:对于一些生成的代码或第三方库,可以通过
excludes
将它们排除在覆盖率统计之外,确保报告准确反映实际开发代码的覆盖情况。
总结
- 设置覆盖率阈值:
jacoco-maven-plugin
提供了灵活的覆盖率阈值配置,支持行覆盖率和分支覆盖率的设置。通过check
目标可以根据项目需求定义最低标准,确保代码质量。 - 详细配置:行覆盖率、分支覆盖率、方法覆盖率、类覆盖率等指标都可以单独设定阈值,灵活控制构建流程中的覆盖率标准。
- 实践应用:通过逐步提升覆盖率阈值,结合 CI/CD 工具进行自动化检测,可以有效保证代码的质量和可测试性。
通过这些配置和实践建议,你可以轻松配置和使用 Jacoco 进行全面的代码覆盖率管理。