一:概述

众所周知,软件的代码覆盖率是衡量软件质量的重要指标,

我们今天简单介绍 JaCoCo 的实际使用示例,它是目前在大多数 Java 项目中应用最广泛的覆盖率检测框架

更多资料参考:JaCoCo 官网

二:引入 Maven 依赖

在 Java 项目中为了方便使用 JaCoCo,我推荐使用它提供的这款 Maven Plngin,在你的 pom.xml 加入依赖:

  1. <plugin>
  2. <groupId>org.jacoco</groupId>
  3. <artifactId>jacoco-maven-plugin</artifactId>
  4. <version>${lacoco-last-version}</version>
  5. <executions>
  6. <execution>
  7. <id>default-prepare-agent</id>
  8. <goals>
  9. <goal>prepare-agent</goal>
  10. </goals>
  11. </execution>
  12. <execution>
  13. <id>default-report</id>
  14. <goals>
  15. <goal>report</goal>
  16. </goals>
  17. </execution>
  18. </executions>
  19. </plugin>

这里使用 ${lacoco-last-version} 变量,推荐你尽量使用最新的 Maven 版本

三:生成覆盖率报告

准备环境:

  • Maven 3.x+
  • 你的项目必须包含合理单元测试

在你项目在执行命令:

  1. $ mvn clean install # 发布构建到你的本地 Maven 仓库

当项目编译完成后,在项目目录:target/site/jacoco/index.html 即可查看到图形化的测试报告,如下:

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

小知识:index.xml 只是覆盖率的 UI 展示,覆盖率的真正数据存储在 target/site/jacoco/jacoco.xml 文件中,jacoco.xml 结合 SonarQube 等工具使用会有更好的覆盖率报告展示效果,不过这是后话,后面有机会再聊

我们简单说明以上三种颜色是怎么回事:

  • 红色标记:表示代码块没有被测试的代码
  • 黄色标记:通常表示只有部分分支被覆盖
  • 绿色标记:表示代码已经全部被单元测试执行过

以下是一个 100% 覆盖率的示例:

覆盖率详细情况:

补充:JaCoCo 涉及的概念比较多,有兴趣可以看官网对其他概念名词的解释,这里不多赘述

四:最低覆盖率限制

在真实项目开发中,我们会为项目设置一个覆盖率指标,未达标的项目会无法通过构建,或者无法通过 CI 集成

那么在项目中,我们可以这样设置覆盖率的最小值限制,如下:

  1. <execution>
  2. <id>jacoco-check</id>
  3. <goals>
  4. <goal>check</goal>
  5. </goals>
  6. <configuration>
  7. <rules>
  8. <rule>
  9. <element>PACKAGE</element>
  10. <limits>
  11. <limit>
  12. <counter>LINE</counter>
  13. <value>COVEREDRATIO</value>
  14. <minimum>0.50</minimum>
  15. </limit>
  16. </limits>
  17. </rule>
  18. </rules>
  19. </configuration>
  20. </execution>

如上,当项目覆盖率低于 50% 的时候,Maven 就会提示构建事情

五:总结

本文简单介绍 JaCoCo 最基本使用和上手,希望你可以通过官网探索更多的高级功能

关于覆盖率给你一些建议:

  • 覆盖率指标大多数情况下仅作为参考,不要用它作为考核指标
  • 不要过于追求覆盖率指标,100% 的覆盖率也不能代表你的项目没有 BUG

上文演示的项目源代码可以在 GitHub Project 中找到,你可以自己拉下来跑跑看

覆盖率检查工具:JaCoCo 食用指南的更多相关文章

  1. 《Android Studio实用指南》7.1 AndroidStudio代码检查工具概述

    本文节选自<Android Studio实用指南> 作者: 毕小朋 目前本书已上传到百度阅读, 在百度中搜索[Anroid Studio实用指南]便可以找到本书. Android Stud ...

  2. 《Android Studio有用指南》7.1 AndroidStudio代码检查工具概述

    本文节选自<Android Studio有用指南> 作者: 毕小朋 博客: http://blog.csdn.net/wirelessqa 眼下本书已上传到百度阅读, 在百度中搜索[Anr ...

  3. 基于lcov实现的增量代码UT覆盖率检查

    背景介绍 配合CppUTest单元测试框架,lcov提供了一套比较完整的工程工具来对UT覆盖率进行度量.但对有些团队来说,历史负担太重,大量的遗留代码没有相应的UT.在这种情况下,对新增代码进行覆盖率 ...

  4. 单元测试-代码覆盖率工具 -- JaCoCo

    最近学习Mybatis的官方文档,看到了[项目文档]一节有很多内容没有见过,做个笔记,理解一下. 随着敏捷开发的流行,编写单元测试已经成为业界共识.但如何来衡量单元测试的质量呢?有些管理者片面追求单元 ...

  5. PG覆盖率检查

    覆盖率检查 需要gcov和lcov工具,gcov在gcc中自带,lcov需要自行下载安装 重新编译 ./configure --prefix=`pwd`/install --with-perl --w ...

  6. Angular 从入坑到挖坑 - 组件食用指南

    一.Overview angular 入坑记录的笔记第二篇,介绍组件中的相关概念,以及如何在 angular 中通过使用组件来完成系统功能的实现 对应官方文档地址: 显示数据 模板语法 用户输入 组件 ...

  7. ffuf 基础食用指南

    PS: 1. 下文出现的某些字典 有可能是因为摆出效果 我自己瞎搞得字典 2. 分享一些好的工具 3. 其实Wfuzz也很好用的 4. 很早之前就在语雀写过Wfuzz和ffuf的笔记 但是一直没有公开 ...

  8. 安天移动安全应对“DressCode”威胁,发布企业移动威胁检查工具

    近日,一种名为"DressCode"的恶意代码引起了国内安全行业的关注,该恶意代码以企业员工的移动设备作为跳板对企业内网进行攻击,对企业安全造成严重威胁.安天移动安全公司威胁情报团 ...

  9. Chrome开发者工具不完全指南(六、插件篇)

    本篇是Chrome开发者工具的结尾篇,最后为大家介绍几款功能强大的插件.在chrome商店里面有很多插件,没事建议大家去逛逛.不过需要FQ,所以诸位请自备神器.一.皮肤插件 首先是大家期盼已久,翘首以 ...

随机推荐

  1. 在node中通过cors跨域。

    cors : 全称 cross origin resource share  跨资源共享 在nodejs 中可以通过在服务器端设置代码如下实现cors跨域 res.setHeader('Access- ...

  2. python的数据库编程

    数据库的基础知识 一.数据库的概念 数据库将大量数据按照一定的方式组织并存储起来,是相互关联的数据的集合.数据库中的数据不仅包括描述事物数据的本身,还包括相关数据之间的联系.数据库可以分为关系型数据库 ...

  3. 使用 Jenkins 进行持续集成与发布流程图

    应用构建和发布流程说明: 用户向 Gitlab 提交代码,代码中必须包含 Dockerfile 将代码提交到远程仓库 用户在发布应用时需要填写 git 仓库地址和分支.服务类型.服务名称.资源数量.实 ...

  4. 3天时间从零到上架AppStore流程记录

    3天时间从零到上架AppStore流程记录 清明假期刚过去一周,我如愿以偿把自己想要的一个App上架了AppStore 从有idea到技术选型,从设计稿到框架开发,从提审AppStore到上架一共经历 ...

  5. Java学习day10

    在类内定义的类就称为内部类.内部类可以访问外部类的所有成员,外部类要访问内部类,必须先建立对象 内部类分为成员内部类和局部内部类 外界创建public修饰的成员内部类对象的格式:外部类名.内部类名 对 ...

  6. 数据库基础知识详解四:存储过程、视图、游标、SQL语句优化以及索引

    写在文章前:本系列文章用于博主自己归纳复习一些基础知识,同时也分享给可能需要的人,因为水平有限,肯定存在诸多不足以及技术性错误,请大佬们及时指正. 11.存储过程 ​ 存储过程是事先经过编译并存储在数 ...

  7. 2021.08.09 P4868 Preprefix sum(树状数组)

    2021.08.09 P4868 Preprefix sum(树状数组) P4868 Preprefix sum - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 前缀和(pr ...

  8. docker基础_docker引擎内部原理

    docker引擎内部原理 docker主要由以下主要组件构成:docker客户端.docker守护进程(daemon).containerd.runc.shim daemon daemon的主要功能包 ...

  9. 有意思的CVE-2022-0337复现

    前言 前两天在刷tw,看到了个比较有意思的一个CVE漏洞,价值奖励是10000美刀,比较好奇的是价值10000美刀的漏洞是什么样子的,漏洞利用就是需要在浏览器中进行用户交互才能触发该漏洞,但由于 Wi ...

  10. openstack PCI透传(GPU)

    描述 kolla-ansible部署openstack的GPU透传方法 一.gpu物理服务器配置 在gpu服务器上主启用IOMMU 确认内核⽀支持iommu $ cat /proc/cmdline | ...