搞定Go单元测试(三)—— 断言(testify)
在上一篇,介绍了表格驱动测试方法和gomock测试框架,大大提升了测试效率与质量。本篇将介绍在测试中引入断言(assertion),进一步提升测试效率与质量。
为什么需要断言库
我们先来看看Go标准包中为什么没有断言,官方在FAQ里面回答了这个问题。
golang.org/doc/faq#ass…
总体概括一下大意就是:“Go不提供断言,我们知道这会带来一定的不便,其主要目的是为了防止你们这些程序员在错误处理上偷懒。我们知道这是一个争论点,但是我们觉得这样很coooool~~。”所以,我们引入断言库的原因也很明显了:偷懒,引入断言能为我们提供便利——提高测试效率,增强代码可读性。
testify
在断言库的选择上,我们似乎没有过多的选择,从start数和活跃度来看,基本上是testify
一枝独秀。
github.com/stretchr/te…
没有对比就没有伤害,先来看看使用testify
之前的测试方法:
func TestSomeFun(t *testing.T){
...if v != want {t.Fatalf("v值错误,期望值:%s,实际值:%s", want, v)}if err != nil {t.Fatalf("非预期的错误:%s", err)}if objectA != objectB {if objectA.field1 != objectB.field1 {// t.Fatalf() field1值错误...bla bla bla}if objectA.field2 != objectB.field2 {// t.Fatalf() field2值错误...bla bla bla}// 遍历object所有值... bla bla bla}
...
}
复制代码
上述代码充斥着大量if...else..
判断,大段错误信息拼装(真·体力活...),运气不好碰到结构体判断要得将其遍历一遍——不直观,低效,实在是不fashion。
现在,我们使用testify
来改造一下上面的测试示例:
func TestSomeFun(t *testing.T){a := assert.New(t)
...a.Equal(v, want)a.Nil(err,"如果你还是想输出自己拼装的错误信息,可以传第三个参数")a.Equal(objectA, objectB)
...
}
复制代码
三行搞定,测试含义一目了然——直观,高效,简短,fashion。
总结一下
testify使用简单,提升显著,可谓是用一次就会爱上的懒人神器。在结合表格驱动测试,gomock和testify后,我们已经能写出一手优雅漂亮的单元测试代码了。不过,光测试代码优雅还不够,我们还需要帮main.go
也打扮打扮。在下一篇,也是本系列最后一篇文章中,我们将介绍wire依赖注入框架,帮main.go
减肥瘦身。
转载于:https://juejin.im/post/5ce935a1e51d4510aa01147b
搞定Go单元测试(三)—— 断言(testify)相关推荐
- 一篇文章搞定交换机的三种端口类型
啥?交换机的三种端口类型是哪三种?他们有哪些特点?数据处理过程是怎样?你可千万别再一问三不知了,一篇文章帮你搞定. 一.交换机三种端口类型特点: 二.交换机接口出入数据处理过程: 理解这三个名词解 ...
- SpringBoot 轻松搞定数据验证 (三)
感谢作者: http://www.spring4all.com/article/1228 本章也是轻松搞定数据验证的最后一篇, 一起来揭开神秘的分组验证 分组验证 有的时候,我们对一个实体类需要有多中 ...
- 阿里动物园再添新丁,小蛮驴搞定物流最后三公里
作者 | 硬核云顶宫 责编 | 李雪敬 头图 | CSDN 下载自视觉中国 今天的云栖大会上,阿里动物园再添新丁,不再这个新加入的动物既不是骡子也不是马,而是小蛮驴,这是一个专门解决物流最后三公里的A ...
- 阿里动物园再添新丁,小蛮驴搞定物流最后三公里!
作者 | 硬核云顶宫 责编 | 李雪敬 头图 | CSDN 下载自视觉中国 CSDN编者按:昨天的云栖大会上,阿里动物园再添新丁,不再这个新加入的动物既不是骡子也不是马,而是小蛮驴,这是一个专门解决物 ...
- 【Web技术】1320- 一篇文章搞定前端单元测试框架 Jest
前言 虽然有很多前端团队压根现在甚至未来都不太可能使用单元测试,包括我自己的团队,原因无非是耽误时间,开发任务本身就比较重等等理由. 但是我觉得一味的图快,永远是饮鸩止渴,陷入恶性循环,项目快 \-- ...
- 一篇文章搞定前端单元测试框架 Jest
前言 虽然有很多前端团队压根现在甚至未来都不太可能使用单元测试,包括我自己的团队,原因无非是耽误时间,开发任务本身就比较重等等理由. 但是我觉得一味的图快,永远是饮鸩止渴,陷入恶性循环,项目快 \-- ...
- table1 | 一秒搞定你的三线表
1. 需要的包 rm(list=ls()) library(dplyr) library(table1) 2. 示例数据 本次使用的是大名鼎鼎的iris,这里你可以替换成你的数据 dat <- ...
- 搞定第二、三、四层交换机,这是我见过最好的分析
晚上好,我是老杨. 网络设备呢,都是对应工作在OSI(开放系统互连参考模型)这个开放模型的某个层次上的. 工作的层次越高,说明其设备的技术性越高,性能也越好,档次也就越高. 因此,根据工作的协议层交换 ...
- 英语发音基础五天搞定之第三天
包括剩余的一些辅音发音规则,只记录了一些易错的,其他的都是音标基础,感觉不需要记录. 还有开始的句子的节奏和语调,重中之重,需要多加练习 节奏和语调
最新文章
- 2020 年开源许可证最新趋势:67% 为宽松许可证
- ARP欺骗原理与模拟
- 【CSAPP】三、程序的机器级表示
- kienct -color
- MySQL Cluster 配置详细介绍
- 使用GNS3和Cisco IOU搭建路由交换实验-安装篇
- 游戏王计算机兽,游戏王星杯卡——迅猛龙,再生圣经,入侵蠕虫,鼹鼠,幽世之血樱...
- Linux调度新特性EAS
- SpringBoot整合QueryDSL
- PySide6精简教程
- Mac 安装仿宋GB2312 For Word/WPS
- c语言音乐程序天空之城,51单片机演奏天空之城 c语言源程序
- 华为交换机access、trunk、hybrid接口区别理解
- 一个简单的前端手风琴图片滑动展示
- JVAV SE冒泡排序
- wordpress手动安装插件WooCommerce
- zabbix通过插件percona进行监控MySQL
- 1.5 20:球弹跳高度的计算
- 一颗椰子糖机器人_椰子糖热量有多高?看完数据后让人避犹不及!
- 猫眼数据SQLITE保存格式
热门文章
- javascript乘法和加法_JS加减乘除运算
- cefsharp 发送请求服务器_使用 WPF 版简易 SIP 服务器向 GB28181 摄像头发送直播请求...
- Android Studio 更新失败解决方法
- Android 四大组件之——Acitivity(四) Activity是如何加载显示内容的?
- python如何播放视频_如何用python做一个视频搜索+播放器
- Java创建MySQL句柄_MySQL创建用户(CREATE USER)
- java获取小数位数_Java获取小数位数
- java 执行cmd windows_Windows平台Java调用cmd命令执行程序
- 图书查找java_java第三季第一章:查找图书信息实现
- 添加请求头 retrofit_Python爬虫偷懒神器 — 快速构造请求头!