在上一篇,介绍了表格驱动测试方法和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)相关推荐

  1. 一篇文章搞定交换机的三种端口类型

      啥?交换机的三种端口类型是哪三种?他们有哪些特点?数据处理过程是怎样?你可千万别再一问三不知了,一篇文章帮你搞定. 一.交换机三种端口类型特点: 二.交换机接口出入数据处理过程: 理解这三个名词解 ...

  2. SpringBoot 轻松搞定数据验证 (三)

    感谢作者: http://www.spring4all.com/article/1228 本章也是轻松搞定数据验证的最后一篇, 一起来揭开神秘的分组验证 分组验证 有的时候,我们对一个实体类需要有多中 ...

  3. 阿里动物园再添新丁,小蛮驴搞定物流最后三公里

    作者 | 硬核云顶宫 责编 | 李雪敬 头图 | CSDN 下载自视觉中国 今天的云栖大会上,阿里动物园再添新丁,不再这个新加入的动物既不是骡子也不是马,而是小蛮驴,这是一个专门解决物流最后三公里的A ...

  4. 阿里动物园再添新丁,小蛮驴搞定物流最后三公里!

    作者 | 硬核云顶宫 责编 | 李雪敬 头图 | CSDN 下载自视觉中国 CSDN编者按:昨天的云栖大会上,阿里动物园再添新丁,不再这个新加入的动物既不是骡子也不是马,而是小蛮驴,这是一个专门解决物 ...

  5. 【Web技术】1320- 一篇文章搞定前端单元测试框架 Jest

    前言 虽然有很多前端团队压根现在甚至未来都不太可能使用单元测试,包括我自己的团队,原因无非是耽误时间,开发任务本身就比较重等等理由. 但是我觉得一味的图快,永远是饮鸩止渴,陷入恶性循环,项目快 \-- ...

  6. 一篇文章搞定前端单元测试框架 Jest

    前言 虽然有很多前端团队压根现在甚至未来都不太可能使用单元测试,包括我自己的团队,原因无非是耽误时间,开发任务本身就比较重等等理由. 但是我觉得一味的图快,永远是饮鸩止渴,陷入恶性循环,项目快 \-- ...

  7. table1 | 一秒搞定你的三线表

    1. 需要的包 rm(list=ls()) library(dplyr) library(table1) 2. 示例数据 本次使用的是大名鼎鼎的iris,这里你可以替换成你的数据 dat <- ...

  8. 搞定第二、三、四层交换机,这是我见过最好的分析

    晚上好,我是老杨. 网络设备呢,都是对应工作在OSI(开放系统互连参考模型)这个开放模型的某个层次上的. 工作的层次越高,说明其设备的技术性越高,性能也越好,档次也就越高. 因此,根据工作的协议层交换 ...

  9. 英语发音基础五天搞定之第三天

    包括剩余的一些辅音发音规则,只记录了一些易错的,其他的都是音标基础,感觉不需要记录. 还有开始的句子的节奏和语调,重中之重,需要多加练习 节奏和语调

最新文章

  1. 2020 年开源许可证最新趋势:67% 为宽松许可证
  2. ARP欺骗原理与模拟
  3. 【CSAPP】三、程序的机器级表示
  4. kienct -color
  5. MySQL Cluster 配置详细介绍
  6. 使用GNS3和Cisco IOU搭建路由交换实验-安装篇
  7. 游戏王计算机兽,游戏王星杯卡——迅猛龙,再生圣经,入侵蠕虫,鼹鼠,幽世之血樱...
  8. Linux调度新特性EAS
  9. SpringBoot整合QueryDSL
  10. PySide6精简教程
  11. Mac 安装仿宋GB2312 For Word/WPS
  12. c语言音乐程序天空之城,51单片机演奏天空之城 c语言源程序
  13. 华为交换机access、trunk、hybrid接口区别理解
  14. 一个简单的前端手风琴图片滑动展示
  15. JVAV SE冒泡排序
  16. wordpress手动安装插件WooCommerce
  17. zabbix通过插件percona进行监控MySQL
  18. 1.5 20:球弹跳高度的计算
  19. 一颗椰子糖机器人_椰子糖热量有多高?看完数据后让人避犹不及!
  20. 猫眼数据SQLITE保存格式

热门文章

  1. javascript乘法和加法_JS加减乘除运算
  2. cefsharp 发送请求服务器_使用 WPF 版简易 SIP 服务器向 GB28181 摄像头发送直播请求...
  3. Android Studio 更新失败解决方法
  4. Android 四大组件之——Acitivity(四) Activity是如何加载显示内容的?
  5. python如何播放视频_如何用python做一个视频搜索+播放器
  6. Java创建MySQL句柄_MySQL创建用户(CREATE USER)
  7. java获取小数位数_Java获取小数位数
  8. java 执行cmd windows_Windows平台Java调用cmd命令执行程序
  9. 图书查找java_java第三季第一章:查找图书信息实现
  10. 添加请求头 retrofit_Python爬虫偷懒神器 — 快速构造请求头!