『啥叫不可测试代码』

最近写单元测试,知道 golang的单测覆盖率提高会比较难,没想到这么难。当提高到一定程度,有的 case就无法成型了,也就无从增加覆盖率。为何呢?思考许久,究其原因,还是被测代码属于“不可测代码”。

不可测代码有哪些特性呢?对照着手中这段代码,我也尝试归纳下:

1 代码中用了全局常量。特别是测试环境和正式环境不一样的常量。比如一个创建文件的函数,把文件所在目录常量化,那么这个函数就完全不可测了。

解决办法就是把全局常量换成全局变量。

2 代码中频繁使用隐藏 go。比如一个函start 函数,里面是启动了一个 goroutine,循环监听 channel。这个函数就很难测试,因为测试用例不是常驻的,甚至不应该是阻塞等待的,它就无法等待新开启的 goroutine运行完整。

解决办法就是想办法把 go关键字放到函数外面去。

3  链式调用。在函数内部链式调用,我们打桩都不知道打在哪个函数上,导致整个父函数很难写测试用例。

解决办法就是少用链式调用。

4 定义了一个结构体,但它的调用函数依赖各种配置项。比如一个函数如果配置了 a 值,就走 a 逻辑,否则走 b 逻辑。这些配置项没有在结构体中定义,而是调用全局方法来获取。这种配置项的 mock 需要花费极大的精力。

解决方式是把配置项作为结构体属性。当我们使用这些逻辑分支相关配置的时候,这些配置实际上就是逻辑的一部分了,它应该作为结构体的元素被表示出来。

大概能看到的几种场景就是如上了,总结下

- 错误使用全局常量

- 频繁使用隐藏 go 函数

- 频繁使用链式调用

- 频繁使用逻辑配置,且从全局获取这些逻辑配置

所以,当代码有了上述表征,就可以冠名之为,不可测代码。cr 的时候你就可以勇敢说出那句,wtf。

af7b96d0ccc72d97ed74ebdd83a8f8f9.jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/723369.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

NSSCTF-Web题目10

目录 [强网杯 2019]随便注 1、题目 2、知识点 3、思路 [GXYCTF 2019]BabyUpload 1、题目 2、知识点 3、思路 [强网杯 2019]随便注 1、题目 2、知识点 数据库注入,堆叠注入,更改表名 3、思路 正常提交查询,看看数据回显 加入单引号…

数学建模基础:非线性模型

目录 前言 一、非线性方程组 二、非线性规划 三、微分方程模型 四、非线性模型的应用 五、实例示范:传染病传播模型 实例总结 五、总结 前言 非线性模型用于描述变量之间的非线性关系,相比线性模型,其数学形式更为复杂,但…

Window常用的脚本有哪些?快来看看有哪些是你正在用的!(欢迎评论补充~)

前言 在日常开发中,如果能熟练掌握以下这些使用频率很高的脚本,那工作起来真的是手拿把攥,事半功倍,接下来给大家介绍一些我们日常使用率很高的一些脚本! 常用脚本(Batchfile & VBScript) 1.一键启动.bat 一次…

Android device/xxx/system/common/overlay编译产物

MTK 如下代码编译的产物在 framework-res.apk 编译配置文件在device/mediatek/system/common/目录下的Android.bp device/mediatek/system/common/overlay/telephony/frameworks/base/core/res/res/values-mcc655-mnc01/config.xml 在Android U上面还在overlay目录中进行了产…

pytets测试框架中如果需要运行多个测试套件时pytest.ini文件设置

pytets测试框架中如果需要运行多个测试套件时pytest.ini文件设置方法 testpaths testcases/fenmi testcases/weixin testcases/Zgen

【数据结构与算法】对称矩阵,三角矩阵 详解

给出对称矩阵、三角矩阵的节省内存的存贮结构并写出相应的输入、输出算法。 对称矩阵和三角矩阵可以通过特殊的存储结构来节省内存。这种存储结构只存储矩阵的一部分元素,而不是全部元素。 对称矩阵:对于一个n阶对称矩阵,我们只需要存储主对…

【单片机毕业设计选题24014】-基于Arduino的瓜果采摘机构设计

系统功能: 使用MeArm机械臂, 上电后四路舵机处于初始90度位置,通过APP"蓝牙调试器"连接手机后可通过手机端控制四路舵机执行单独或连续的动作,并读取颜色传感器的RGB值。 主要功能模块原理图: 资料获取地址 系统主要功能模块代码 //存储电机…

备忘录文字颜色怎么改 备忘录改变字体颜色方法

在日常的工作和生活中,备忘录已经成为我不可或缺的好帮手。但是,面对满满当当的备忘录,有时候不同的任务和信息都混在一起,让人眼花缭乱。我常常想,如果能改变备忘录中的文字颜色,用以区分不同类别的事项&a…

如何打开pak文件-翻译pak语言包

最近碰到一些程序的语言包是pak格式,用Notepad打开全是乱码,百度搜索了一下,pak是一种少见的压缩文件格式,是pak Quake系列游戏所采用的一种特殊压缩包格式,由Quake游戏公司开发,用高版本的winrar可以打开&…

哪个城市的Delphier最多?Delphier平均年龄多大了?

先来看看哪个城市的Delphier最多: 北上广深不是白叫的, 大家想换工作,就去这些大城市,机会多。 有人会觉得奇怪,怎么才这么几个人? 因为以上数据统计基数为2000人, 根据微信公众号和QQ群得出…

好用耐用充电宝有哪些牌子?公认性能超全充电宝品牌

在共享充电宝遍布大街小巷的今天,许多人可能会觉得拥有一款自己的充电宝已经不再必要。然而,共享充电宝的高昂费用和不够便携的特点,让越来越多的消费者开始重新考虑购买一款属于自己的充电宝。那么,在众多充电宝品牌中&#xff0…

反激开关电源整流桥选型及计算

整流桥的作用就是把输入交流电压整形成直流电压,把正弦波整成馒头波,由于整流管的单向导电 性,在输入电压瞬时值小于滤波电容上电压时整流桥,在这个时候是不导通的,使整流桥的电流变 成2-3ms左右的窄脉冲。为获得所需…

python-jupyter notebook安装教程

🌈所属专栏:【python】✨作者主页: Mr.Zwq✔️个人简介:一个正在努力学技术的Python领域创作者,擅长爬虫,逆向,全栈方向,专注基础和实战分享,欢迎咨询! 您的…

深度学习(理论知识)

一、监督学习、自监督和半监督 1、监督学习(Supervised Learning) 概念 监督学习是一种机器学习方法,通过使用带标签的数据进行训练,模型学习从输入到输出的映射关系。数据集中的每个样本都包含输入特征(features&am…

开辟一个存储空间以存放一个结构体数据

在软件开发中,常常需要动态地分配和撤销内存空间,例如对动态链表中结点的插入与删除。在C语言中是利用库函数malloc和free来分配和撤销内存空间的。C提供了较简便而功能较强的运算符new和delete 来取代malloc和free函数。注意:new和delete是运…

使用查表法计算NTC热敏电阻的温度

代码: hardware.c /*《AVR专题精选》随书例程2.编程技巧项目:查表法使用NTC测量温度文件:hardware.c说明:硬件驱动文件作者:邵子扬时间:2012年12月12日*/ #include "hardware.h"// IO初始化 vo…

分享一下,如何搭建个人网站的步骤

在这段充满探索与创造的奇妙旅途中,我就像一位耐心的建筑师,在数字世界的荒原上精心雕琢,两周的时光缓缓流淌。每天,我与代码共舞,手执HTML、CSS与JavaScript这三大构建魔杖,一砖一瓦地筑起了梦想中的网络城…

Rcmp: Reconstructing RDMA-Based Memory Disaggregation via CXL——论文阅读

TACO 2024 Paper CXL论文阅读笔记整理 背景 RDMA:RDMA是一系列协议,允许一台机器通过网络直接访问远程机器中的数据。RDMA协议通常固定在RDMA NIC(RNIC)上,具有高带宽(>10 GB/s)和微秒级延…

星戈瑞FITC-Cytochrome C:荧光标记细胞色素C的研究与应用

细胞色素C(Cytochrome C)是一种位于线粒体内膜上的蛋白质。为了深入地研究细胞色素C在细胞生物学和病理学中的功能,科学家们常常采用荧光标记技术对其进行追踪和观察。其中,异硫氰酸荧光素(FITC)作为一种常…

《Deep learning practice》learning notes

学习笔记: 【公开课】旷视x北大《深度学习实践》(28课时全) R Talk | 旷视科技目标检测概述:Beyond RetinaNet and Mask R-CNN 文章目录 Lecture 1: Introduction to Computer Vision and Deep Learning(孙剑&#x…