Jast blog Jast blog
首页
  • 《Ambari自定义开发教程》笔记
  • 《CDH教程》笔记
  • 《ClickHouse教程》笔记
  • 《HDFS教程》笔记
  • 《DolphinScheduler教程》笔记
  • 《Hbase教程》笔记
  • 《Iceberg教程》笔记
  • 《Hive教程》笔记
  • 《Flume教程》笔记
  • 《Kafka教程》笔记
  • 《Impala教程》笔记
  • 《Hue教程》笔记
  • 《Spark教程》笔记
  • 《Flink教程》笔记
  • 《Phoenix教程》笔记
  • 《ElasticSearch教程》笔记
  • 《Kylin教程》笔记
  • 《Storm教程》笔记
  • 《Yarn教程》笔记
  • 《Presto教程》笔记
  • 《图数据库教程》笔记
  • 《Kerberos教程》笔记
  • 《Maxwell教程》笔记
  • 《MinIO教程》笔记
  • 《DataX教程》笔记
  • 《Superset教程》笔记
  • 《IOTDB教程》笔记
  • 《大数据相关》笔记
  • 《PaddleNLP教程》笔记
  • 《Nginx教程》笔记
  • 《Java技术文档》
  • 《Maven教程》笔记
  • 《IDEA使用教程》
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档

Jast-zsh

如果你知道你要去哪里,全世界都会给你让路。
首页
  • 《Ambari自定义开发教程》笔记
  • 《CDH教程》笔记
  • 《ClickHouse教程》笔记
  • 《HDFS教程》笔记
  • 《DolphinScheduler教程》笔记
  • 《Hbase教程》笔记
  • 《Iceberg教程》笔记
  • 《Hive教程》笔记
  • 《Flume教程》笔记
  • 《Kafka教程》笔记
  • 《Impala教程》笔记
  • 《Hue教程》笔记
  • 《Spark教程》笔记
  • 《Flink教程》笔记
  • 《Phoenix教程》笔记
  • 《ElasticSearch教程》笔记
  • 《Kylin教程》笔记
  • 《Storm教程》笔记
  • 《Yarn教程》笔记
  • 《Presto教程》笔记
  • 《图数据库教程》笔记
  • 《Kerberos教程》笔记
  • 《Maxwell教程》笔记
  • 《MinIO教程》笔记
  • 《DataX教程》笔记
  • 《Superset教程》笔记
  • 《IOTDB教程》笔记
  • 《大数据相关》笔记
  • 《PaddleNLP教程》笔记
  • 《Nginx教程》笔记
  • 《Java技术文档》
  • 《Maven教程》笔记
  • 《IDEA使用教程》
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
  • Freemarker模板使用
  • Java项目通过Log4j将日志发送到Kafka
  • Java Maven中自动代码检查插件
  • Protobuf详细介绍
  • 提升开发效率:JCommander高效Java命令行参数解析利器
  • 36k Star!Arthas Java开发者的故障排查利器
  • 高级单元测试中的 Mockito 使用指南
  • Java代码覆盖率工具
    • 什么是代码覆盖率?
    • 什么是 JaCoCo?
    • JaCoCo Maven 插件的安装与配置
      • 详细说明
    • 执行测试并生成覆盖率报告
      • 验证覆盖率
    • 最佳实践:集成 JaCoCo 到持续集成 CI/CD 流程
      • 示例 Jenkinsfile
  • Jar包源码修改
  • 《Java技术文档》
Jast-zsh
2024-11-06
目录

Java代码覆盖率工具

# 推荐一款 Java 代码覆盖率工具

# 什么是代码覆盖率?

代码覆盖率是指在软件测试过程中,测试用例执行源代码的比例。它反映了测试对代码的覆盖程度,即有多少代码被测试所执行。较高的代码覆盖率通常意味着更多的代码被测试过,有助于发现潜在的错误和问题,提高软件质量。

# 什么是 JaCoCo?

JaCoCo(Java Code Coverage)是一个用于 Java 项目的开源工具,可以测量 Java 程序的代码覆盖率,主要用于评估单元测试的效果。它提供了详细的执行报告,包括代码的哪些部分被测试覆盖,以及哪些没有被测试到。JaCoCo 支持多种构建工具,其中 Maven 是最常见的用途之一。

# JaCoCo Maven 插件的安装与配置

在 Maven 项目中使用 JaCoCo 插件非常简单。您只需要将插件添加到项目的 pom.xml 文件中。以下是基本的配置示例:

	<build>
        <plugins>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.8.12</version>
                <configuration>
                    <!-- 排除特定的包或类 -->
                    <excludes>
                        <exclude>**/config/**</exclude>
                        <exclude>**/model/**</exclude>
                        <exclude>**/entity/**</exclude>
                        <exclude>**/dto/**</exclude>
                    </excludes>
                </configuration>
                <executions>
                    <!-- 准备阶段:初始化JaCoCo代理 -->
                    <execution>
                        <id>prepare-agent</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>

                    <!-- 单元测试报告生成 -->
                    <execution>
                        <id>report</id>
                        <goals>
                            <goal>report</goal>
                        </goals>
                        <phase>verify</phase>
                    </execution>

                    <!-- 添加测试覆盖率检查 -->
                    <execution>
                        <id>jacoco-check</id>
                        <goals>
                            <goal>check</goal>
                        </goals>
                        <configuration>
                            <rules>
                                <rule implementation="org.jacoco.maven.RuleConfiguration">
                                    <element>BUNDLE</element>
                                    <limits>
                                        <limit implementation="org.jacoco.report.check.Limit">
                                            <counter>LINE</counter>
                                            <value>COVEREDRATIO</value>
                                            <minimum>0.80</minimum>
                                        </limit>
                                        <limit implementation="org.jacoco.report.check.Limit">
                                            <counter>BRANCH</counter>
                                            <value>COVEREDRATIO</value>
                                            <minimum>0.70</minimum>
                                        </limit>
                                        <limit implementation="org.jacoco.report.check.Limit">
                                            <counter>METHOD</counter>
                                            <value>COVEREDRATIO</value>
                                            <minimum>0.80</minimum>
                                        </limit>
                                    </limits>
                                </rule>
                            </rules>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68

# 详细说明

  • version: 这里使用的是 JaCoCo 的最新稳定版本,你可以在 : https://www.jacoco.org/jacoco/trunk/doc/changes.html 页面找到最新的版本。
  • prepare-agent: 这个目标会在测试运行之前准备 JaCoCo 的代理,监控代码执行。
  • report: 此目标用于生成测试代码覆盖率报告。

# 执行测试并生成覆盖率报告

一旦您完成了 JaCoCo 插件的配置,就可以通过 Maven 命令执行单元测试并生成代码覆盖率报告。

mvn clean test
mvn jacoco:report
1
2

运行上述命令后,JaCoCo 将自动插入代理,并在测试完成后生成报告。报告通常生成在 target/site/jacoco/ 目录下,包括 HTML 格式、XML 格式和其他格式供后续分析。

JaCoCo 生成的报告将展示代码覆盖率的详细信息,通常包括以下几项:

  • 指令覆盖率: 测试用例实际执行的代码行与总代码行的比例。
  • 分支覆盖率: 测试用例针对条件分支的执行情况。
  • 行覆盖率: 每个代码行被测试用例执行的次数。

下图是 HTML 格式的报告:

image-20241106131008117

各列的含义:

  1. Element:元素名称,通常是包名或类名。
  2. Missed Instructions:未被覆盖的指令数。
  3. Cov.:覆盖率(Coverage),表示已执行的指令占总指令的比例。
  4. Missed Branches:未被覆盖的分支数。
  5. Cov.:覆盖率(Coverage),表示已执行的分支占总分支的比例。
  6. Missed Cxty:未被覆盖的上下文数。
  7. Missed Lines:未被覆盖的行数。
  8. Missed Methods:未被覆盖的方法数。
  9. Missed Classes:未被覆盖的类数。

表格格式报告

image-20241106131905391

# 验证覆盖率

mvn clean verify
1

如果覆盖率不够会提示异常

image-20241106133937413

# 最佳实践:集成 JaCoCo 到持续集成 CI/CD 流程

集成 JaCoCo 将有助于确保每个版本都达到预期的代码覆盖率。以下是一个示例,展示如何在 Jenkins 中集成 JaCoCo。

  1. 创建新项目: 在 Jenkins 中创建一个新项目,选择合适的项目类型(如自由风格项目)。
  2. 配置构建步骤: 在构建配置中添加 Maven 构建步骤,命令为 clean test。
  3. 添加 JaCoCo 插件: 在 Jenkins 的插件管理中安装 JaCoCo 插件,并在构建后操作中配置报告生成路径。

# 示例 Jenkinsfile

如果您使用 Jenkins Pipeline,可以使用以下示例 Jenkinsfile 来集成 JaCoCo:

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                script {
                    // 执行 Maven 构建
                    sh 'mvn clean install'
                }
            }
        }
        stage('Test') {
            steps {
                script {
                    // 执行测试并生成覆盖率报告
                    sh 'mvn test'
                }
            }
        }
        stage('Report') {
            steps {
                script {
                    // 生成 JaCoCo 报告
                    sh 'mvn jacoco:report'
                }
            }
        }
    }
    post {
        always {
            // 归档 JaCoCo 报告
            archiveArtifacts artifacts: 'target/site/jacoco/**/*', allowEmptyArchive: true
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

通过这种方式,构建过程将生成代码覆盖率报告,方便团队持续监控测试效果。

上次更新: 2024/11/09, 21:00:16
高级单元测试中的 Mockito 使用指南
Jar包源码修改

← 高级单元测试中的 Mockito 使用指南 Jar包源码修改→

最近更新
01
Linux可视化监控
02-26
02
Maven私服搭建
02-26
03
当ElasticSearch时间字段设置多个格式到底是用的哪个?
01-19
更多文章>
Theme by Vdoing | Copyright © 2016-2025 Jast-zsh | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式