如何有效保证Java代码单元测试覆盖率

2023-11-15

背景介绍

我们在实际项目开发过程中,不同level的童鞋由于专业技能的层次不同,导致在参与实际开发的业务代码中经常会出现各种bug,项目管理中好的pm或许会给充足的时间来让开发童鞋们定位修复这些bug,也有各种客观原因的PM不会在项目中预留这些时间,往往就需要开发自己通过加班来修复赶上项目整体的进度
基于以上背景,那我们有没有一种更有效的方式来保证业务代码的质量呢?
本人推荐的是通过严格的一套单元测试体系来保证我们的代码质量,当然除此之外的手段比如code review、开发规范等等不在本文介绍。

单元测试体系搭建

编写单元测试代码

针对我们的所有业务代码的类进行一对一时的单元测试覆盖,如下图所示:

  1. 业务代码:
@RestController
@RequestMapping("/hello")
public class HelloWorldController {
    @Autowired
    private IHelloWorldService helloWorldService;

    @GetMapping("/say")
    public Result<String> sayHello(@RequestParam(value = "msg",required = false) String msg){
        Result result = new Result();
        result.setCode(200);
        result.setData(helloWorldService.sayHello(msg));
        result.setMsg("OK");
        return result;
    }
}
  1. 对应的单元测试代码如下:

@SpringBootTest
@RunWith(SpringRunner.class)
public class HelloWorldControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @MockBean
    private IHelloWorldService helloWorldService;


    @Test
    public void test()throws Exception{

        RequestBuilder requestBuilder = MockMvcRequestBuilders.get("/hello/say").accept(
                MediaType.APPLICATION_JSON);
        MvcResult result= mockMvc.perform(requestBuilder).andReturn();
        Assert.assertEquals(HttpStatus.OK.value(),result.getResponse().getStatus());

    }
}

选用单元测试框架

本人推荐用Jacoco即 Code Coverage for Java的缩写或Emma,本人在idea中安装Jacoco插件按照如下图所示:
在这里插入图片描述

执行单元测试

在这里插入图片描述
修改单元测试的框架:
在这里插入图片描述
执行单元测试:
在这里插入图片描述
按照如上图所示的操作可以看到单元测试覆盖率如下图:
在这里插入图片描述

在这里插入图片描述
按照如上图所示的两步操作完毕之后,会生成如下图所示的site目录:
在这里插入图片描述

打开如上图所示的index.html文件可以查看网页版的单元测试覆盖率,如下图所示:
在这里插入图片描述
查看具体某一个类的单元测试覆盖率
在这里插入图片描述
如上图所示:
单元测试覆盖率主要分为如下几类:
1、代码覆盖率 (Instructions Cov.)
2、逻辑分支覆盖率(Branches Cov.)
3、判断行数覆盖率(Cxty Cov.)
4、代码行数覆盖率(Lines Cov.)
5、方法个数覆盖率(Methods Cov.)
6、类覆盖率(Classes Cov.)

Missed 所在列表示当前类型缺失的数量

总结

其实在具体项目实操过程中发现做整项目所有类的单测工作量是巨大无比的,毫不夸张的说编写单元测试的代码的工作量远远超出了实际编写业务代码的工作量,所以本人介绍的初衷只是告诉诸位技术层面如何有效保证代码质量,具体落地时因地制宜吧,根据实际项目情况技术负责人和PM综合评估而定。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何有效保证Java代码单元测试覆盖率 的相关文章

随机推荐

  • JS中0.1+0.2!=0.3

    控制台打印测试 console log 0 1 0 2 0 30000000000000004 原因 1 存储原理 在计算机中数字无论是定点数还是浮点数都是以多位二进制的方式进行存储的 在JS中数字采用的IEEE 754的双精度标准进行存储
  • C++【多线程】

    文章目录 一 什么是线程 二 创建线程 pthread create pthread join 三 线程退出 pthread exit pthread cancel 线程id pthread self 四 进程对于共享资源的访问 threa
  • 餐饮行业RPA之5大应用场景

    眼下 伴随着一系列风险因素 餐饮业的情况变得越来越困难 规模较小 财务状况较差的餐饮商户面临着极大的生存挑战 即使是有一定知名度和客源的大品牌餐饮加盟连锁店 也被逼到了墙角 近年来 餐饮业市场竞争激烈 而且同质化严重 即使没有疫情冲击 众多
  • 计算机恢复工具有哪些,电脑数据恢复软件选哪个?这三款恢复工具不容错过

    不论我们是使用电脑来编写学习论文 还是完成老师所留的专业作业 再或者是处理日常工作或者是紧急工作 我们都会在电脑上存储一些重要的文件 就算我们的电脑不是学习或工作所用的话 那么电脑上也会存储一些自己认为比较重要的文件的 即便我们将重要的文件
  • 基于SSM的图书管理系统

    一 系统简介 该项目是基于Java的SSM框架实现的图书管理系统 二 技术实现 1 后台框架 Spring SpringMVC MyBatis Ajax 2 UI界面 BootStrap 3 数据库 MySQL 5 7 4 加密 md5 随
  • java类库EthereumJ如何操作以太坊区块链

    在本文中 我们将看一下EthereumJ库 它允许我们使用Java与以太坊区块链进行交互 以太坊作为一种加密货币 利用去中心化 点对点 可编程区块链形式的数据库 以太坊虚拟机 EVM 通过连接不同的节点进行同步和操作 节点通过共识同步区块链
  • 哈夫曼树编码-C语言

    文章目录 哈夫曼树编码 1 实验目的 2 实验内容 3 实验工具 4 实验代码 5 实验结果 6 实验分析 7 资料 哈夫曼树编码 1 实验目的 了解二叉树的定义 理解二叉树的基本性质和存储结构 掌握哈夫曼树的构造 实现哈夫曼编码与译码算法
  • CVE-2017-16995————Ubuntu本地提权漏洞

    前言 近期看到了Ubuntu本地提权漏洞所以顺手演示一份 实践一波 漏洞描述 Ubuntu是一个以桌面应用为主的开源GNU Linux操作系统 基于Debian GNU Linux 近期有白帽子爆出 ubuntu 的最新版本 Ubuntu
  • 外置存储权限在哪打开_安卓手机外置sd卡权限怎么打开

    展开全部 在2 x的版本中 在manifest中配置的权限e68a843231313335323631343130323136353331333365643662android permission WRITE EXTERNAL STORA
  • bug: TypeError: Invalid attempt to spread non-iterable instance

    报错信息 分析 此类报错多为扩展运算符报错 问题代码 解决方式
  • Win11系统pin码忘记了怎么办?Win11忘记pin码解决方法

    Win11系统pin码忘记了怎么办 如果我们忘记了这个密码 那么就会导致无法进入到系统来使用电脑了 这个问题还是比较让人着急的 特别是需要开机进行电脑急用的用户 那么我们怎么去解决这个问题 接下来一起看看Win11忘记pin码解决方法 Wi
  • Windows时间戳的计算

    一 实验目的 掌握Windows中FileTime时间戳的手工解析方法 利用WinHex或X Ways等十六进制编辑器进行手工取证 把Windows中 MFT文件里记载的十六进制时间转化为 年月日时分秒 的可读时间 加深对于时间戳的理解 二
  • 日本核污水今日入海,这帮黑客怒了!

    自2011年东日本大地震以来 日本谋划已久的福岛核电站核污水排海计划已于8月24日下午起正式施行 预计排污周期长达30年 整个海洋及其生物都有可能遭受难不可逆的毁灭性打击 据现场媒体报道 经过17分钟的流淌 核污染水经由1公里的海底隧道流进
  • Web框架中的ORM框架

    Web框架中的ORM框架 在 Python 实现的 Web 框架中 通过 API 接口来访问后端的视图函数 视图函数对数据库中的数据进行处理然后返回给前端 在这个过程中 视图函数不是直接通过 SQL 来操作数据库 而是通过模型类的对象属性或
  • C语言练习题(15) 有如下代码,则 *(p[0]+1) 所代表的数组元素是( )(非常详细的讲解)

    1 有如下代码 则 p 0 1 所代表的数组元素是 int a 3 2 1 2 3 4 5 6 p 3 p 0 a 1 A a 0 1 B a 1 0 C a 1 1 D a 1 2 解析 C a 3 2 1 2 3 4 5 6 p 0 代
  • Ubuntu 16.04 gcc降级为4.8版本

    1 下载gcc g 4 8 sudo apt get install y gcc 4 8 sudo apt get install y g 4 8 2 链接gcc g 实现降级 cd usr bin sudo rm gcc sudo ln
  • 【算法与数据结构】236、LeetCode二叉树的最近公共祖先

    文章目录 一 题目 二 解法 三 完整代码 所有的LeetCode题解索引 可以看这篇文章 算法和数据结构 LeetCode题解 一 题目 二 解法 思路分析 根据定义 最近祖先节点需要遍历节点的左右子树 然后才能知道是否为最近祖先节点 那
  • localhost 已拒绝连接。

    Tomcat的localhost 8080拒绝访问 直接在tomcat的bin目录下双击startup bat 启动就好了 再访问localhost 8080就可以出来了
  • 坑爹公司大盘点 --- 转自拉钩

    那些年我们满怀憧憬迈入社会 却遭遇了理想与现实的碰撞 一起看看网上盘点的坑爹公司吧 遇到这样的公司真的是醉了 gt 转自拉钩 1 头衔公司 从入职第一天 就封你为大中华区销售总监 或者全球发行战略副总裁 全国市场委员会主席 然后没有手下 没
  • 如何有效保证Java代码单元测试覆盖率

    背景介绍 我们在实际项目开发过程中 不同level的童鞋由于专业技能的层次不同 导致在参与实际开发的业务代码中经常会出现各种bug 项目管理中好的pm或许会给充足的时间来让开发童鞋们定位修复这些bug 也有各种客观原因的PM不会在项目中预留