覆盖率检查工具:JaCoCo 食用指南

一:概述
众所周知,软件的代码覆盖率是衡量软件质量的重要指标,
我们今天简单介绍 JaCoCo 的实际使用示例,它是目前在大多数 Java 项目中应用最广泛的覆盖率检测框架
更多资料参考:JaCoCo 官网
二:引入 Maven 依赖
在 Java 项目中为了方便使用 JaCoCo,我推荐使用它提供的这款 Maven Plngin,在你的 pom.xml 加入依赖:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${lacoco-last-version}</version>
<executions>
<execution>
<id>default-prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>default-report</id>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
这里使用 ${lacoco-last-version} 变量,推荐你尽量使用最新的 Maven 版本
三:生成覆盖率报告
准备环境:
- Maven 3.x+
- 你的项目必须包含合理单元测试
在你项目在执行命令:
$ mvn clean install # 发布构建到你的本地 Maven 仓库
当项目编译完成后,在项目目录:target/site/jacoco/index.html 即可查看到图形化的测试报告,如下:

点击链接,你可以查看每个类的代码覆盖情况,如下:

小知识:index.xml 只是覆盖率的 UI 展示,覆盖率的真正数据存储在 target/site/jacoco/jacoco.xml 文件中,jacoco.xml 结合 SonarQube 等工具使用会有更好的覆盖率报告展示效果,不过这是后话,后面有机会再聊
我们简单说明以上三种颜色是怎么回事:
- 红色标记:表示代码块没有被测试的代码
- 黄色标记:通常表示只有部分分支被覆盖
- 绿色标记:表示代码已经全部被单元测试执行过
以下是一个 100% 覆盖率的示例:

覆盖率详细情况:

补充:JaCoCo 涉及的概念比较多,有兴趣可以看官网对其他概念名词的解释,这里不多赘述
四:最低覆盖率限制
在真实项目开发中,我们会为项目设置一个覆盖率指标,未达标的项目会无法通过构建,或者无法通过 CI 集成
那么在项目中,我们可以这样设置覆盖率的最小值限制,如下:
<execution>
<id>jacoco-check</id>
<goals>
<goal>check</goal>
</goals>
<configuration>
<rules>
<rule>
<element>PACKAGE</element>
<limits>
<limit>
<counter>LINE</counter>
<value>COVEREDRATIO</value>
<minimum>0.50</minimum>
</limit>
</limits>
</rule>
</rules>
</configuration>
</execution>
如上,当项目覆盖率低于 50% 的时候,Maven 就会提示构建事情
五:总结
本文简单介绍 JaCoCo 最基本使用和上手,希望你可以通过官网探索更多的高级功能
关于覆盖率给你一些建议:
- 覆盖率指标大多数情况下仅作为参考,不要用它作为考核指标
- 不要过于追求覆盖率指标,100% 的覆盖率也不能代表你的项目没有 BUG
上文演示的项目源代码可以在 GitHub Project 中找到,你可以自己拉下来跑跑看
覆盖率检查工具:JaCoCo 食用指南的更多相关文章
- 《Android Studio实用指南》7.1 AndroidStudio代码检查工具概述
本文节选自<Android Studio实用指南> 作者: 毕小朋 目前本书已上传到百度阅读, 在百度中搜索[Anroid Studio实用指南]便可以找到本书. Android Stud ...
- 《Android Studio有用指南》7.1 AndroidStudio代码检查工具概述
本文节选自<Android Studio有用指南> 作者: 毕小朋 博客: http://blog.csdn.net/wirelessqa 眼下本书已上传到百度阅读, 在百度中搜索[Anr ...
- 基于lcov实现的增量代码UT覆盖率检查
背景介绍 配合CppUTest单元测试框架,lcov提供了一套比较完整的工程工具来对UT覆盖率进行度量.但对有些团队来说,历史负担太重,大量的遗留代码没有相应的UT.在这种情况下,对新增代码进行覆盖率 ...
- 单元测试-代码覆盖率工具 -- JaCoCo
最近学习Mybatis的官方文档,看到了[项目文档]一节有很多内容没有见过,做个笔记,理解一下. 随着敏捷开发的流行,编写单元测试已经成为业界共识.但如何来衡量单元测试的质量呢?有些管理者片面追求单元 ...
- PG覆盖率检查
覆盖率检查 需要gcov和lcov工具,gcov在gcc中自带,lcov需要自行下载安装 重新编译 ./configure --prefix=`pwd`/install --with-perl --w ...
- Angular 从入坑到挖坑 - 组件食用指南
一.Overview angular 入坑记录的笔记第二篇,介绍组件中的相关概念,以及如何在 angular 中通过使用组件来完成系统功能的实现 对应官方文档地址: 显示数据 模板语法 用户输入 组件 ...
- ffuf 基础食用指南
PS: 1. 下文出现的某些字典 有可能是因为摆出效果 我自己瞎搞得字典 2. 分享一些好的工具 3. 其实Wfuzz也很好用的 4. 很早之前就在语雀写过Wfuzz和ffuf的笔记 但是一直没有公开 ...
- 安天移动安全应对“DressCode”威胁,发布企业移动威胁检查工具
近日,一种名为"DressCode"的恶意代码引起了国内安全行业的关注,该恶意代码以企业员工的移动设备作为跳板对企业内网进行攻击,对企业安全造成严重威胁.安天移动安全公司威胁情报团 ...
- Chrome开发者工具不完全指南(六、插件篇)
本篇是Chrome开发者工具的结尾篇,最后为大家介绍几款功能强大的插件.在chrome商店里面有很多插件,没事建议大家去逛逛.不过需要FQ,所以诸位请自备神器.一.皮肤插件 首先是大家期盼已久,翘首以 ...
随机推荐
- SpringMVC获取请求参数-集合类型
1.创建User实体类 ```java public class User { private String username; private int age; public String getU ...
- Linux小工具的应用,grep,sort,wc,cut
小工具的使用: 1.管道(|):连接多个命令的工具,进程之间通讯的一种方式 用法:命令1 | 命令2 | 命令3....2.grep工具:行过滤,打印出的结果一行一行的 用法:grep options ...
- java_类的访问控制符
1.分类: public protected default private是java中的访问控制修饰符. public String name; protected String name; Str ...
- JavaScript学习总结9
今天学习了表单提交,JQuery部分知识
- 2021.12.10 P2516 [HAOI2010]最长公共子序列(动态规划+滚动数组)
2021.12.10 P2516 [HAOI2010]最长公共子序列(动态规划+滚动数组) https://www.luogu.com.cn/problem/P2516 题意: 给定字符串 \(S\) ...
- [STL] stack 栈
在出栈时需要进行两步操作,即先 top( ) 获得栈顶元素,再 pop( ) 删除栈顶元素
- 读 Angular 代码风格指南
读 Angular 代码风格指南 本文写于 2021 年 1 月 17 日 原文地址:Angular 文档 该文章拥有完整的代码风格指南--大到如何编排文件夹,小到如何进行变量命名都涉及.但是与 ng ...
- @Inherited 原注解功能介绍
@Inherited 底层 package java.lang.annotation; /** * Indicates that an annotation type is automatically ...
- 医会宝APP登录体验
帮一个学医生的朋友找相关资料,无意中下载了医会宝APP,登录的时候发现登录方面存在可以优化的地方还挺多,然后随手把登录这部分体验记录下,仅代表个人体验,供新手参考,非权威,交互专家跳过. 一.体验环境 ...
- pip下载更改为清华镜像
step1: + 在user(用户)下新建一文件夹再在该文件夹下新建pip.ini文件 + 例如:user/pip/pip.ini + tips:如果未打开在查看里的隐藏扩展名记得打开 step2: ...