当前位置: 首页 > news >正文

26k Star的Go测试库Testify:断言、Mock、Suite一站搞定

文章目录

  • 26k Star的Go测试库Testify:断言、Mock、Suite一站搞定
    • assert:断言不再是体力活
    • require:失败就停
    • mock:别手写假对象了
    • suite:setup/teardown回到Go
    • 安装和版本
    • 一句话总结
  • 一句话总结

26k Star的Go测试库Testify:断言、Mock、Suite一站搞定

写Go代码的人都经历过:标准库的testing包只给了t.Errort.Fatal,没有断言、没有mock、没有suite。一个简单的判断要写四五行if err != nil,测试代码量经常超过业务代码。

Testify就是为了填这个坑而出现的。GitHub上26,002个Star,几乎所有Go项目都在用它写测试。它把Go测试中缺失的三个能力一次性补齐了。

assert:断言不再是体力活

assert包封装了Go标准库没有的断言方法,把测试代码从手工检查中解放出来:

assert.Equal(t,123,123,"they should be equal")assert.NotEqual(t,123,456,"they should not be equal")assert.Nil(t,err)assert.NotNil(t,result)

每个断言接受testing.T作为第一个参数,失败信息通过标准go test输出。每个方法返回bool值,可以在条件满足时继续后续断言:

ifassert.NotNil(t,object){assert.Equal(t,"Something",object.Value)}

断言多的时候,创建assert实例省掉每次传t

assert:=assert.New(t)assert.Equal(123,123,"they should be equal")assert.NotEqual(123,456,"they should not be equal")

require:失败就停

require的API和assert完全一致,只差一个行为:assert失败后继续执行,require失败后立刻终止当前测试。适合"这个不成立后面就全没意义了"的场景。

mock:别手写假对象了

单元测试最绕不开的就是mock。Go标准库没给mock能力,手写假对象结构体又耗时又容易漏。Testify的mock包把这件事拉平了:

typeMyMockedObjectstruct{mock.Mock}func(m*MyMockedObject)DoSomething(numberint)(bool,error){args:=m.Called(number)returnargs.Bool(0),args.Error(1)}funcTestSomething(t*testing.T){testObj:=new(MyMockedObject)testObj.On("DoSomething",123).Return(true,nil)targetFuncThatDoesSomethingWithObj(testObj)testObj.AssertExpectations(t)}

On().Return()声明期望调用,AssertExpectations验证是否按预期执行。支持mock.Anything作为占位符,参数值不确定时也能写断言。

如果觉得手写mock结构体还是麻烦,配合mockery工具可以根据interface自动生成mock代码。

suite:setup/teardown回到Go

写过Java或Python测试的人会怀念setUp/tearDown。Testify的suite包把这种组织方式搬到了Go:

typeExampleTestSuitestruct{suite.Suite VariableThatShouldStartAtFiveint}func(suite*ExampleTestSuite)SetupTest(){suite.VariableThatShouldStartAtFive=5}func(suite*ExampleTestSuite)TestExample(){suite.Equal(suite.VariableThatShouldStartAtFive,5)}funcTestExampleTestSuite(t*testing.T){suite.Run(t,new(ExampleTestSuite))}

定义结构体嵌入suite.Suite,写SetupTestTearDownTestTest开头的方法自动成为测试用例。suite.Suite内置了断言方法,连assert包也不用单独导入了。

suite包不支持并行测试,如果需要并行跑用例,用assertrequire包自己组织。

安装和版本

一行命令安装:

go get github.com/stretchr/testify

更新到最新版:

go get-ugithub.com/stretchr/testify

支持Go 1.19及以上版本。目前维护在v1,不再接收破坏性变更。

一句话总结

Go的标准库测试太底层,Testify补上了断言、mock和suite三个缺口。26k的Star数不是白来的,如果你的Go项目测试代码里还全是if err != nil,换Testify会让代码精简不少。

一句话总结

Go的标准库测试太底层,Testify补上了断言、mock和suite三个缺口。26k的Star数不是白来的,如果你的Go项目测试代码里还全是if err != nil,换Testify会让代码精简不少。

http://www.zskr.cn/news/1491597.html

相关文章:

  • 重庆主城六区黄金回收门店精选测评 - 润富黄金回收
  • 绵阳高新区卖黄金注意事项 靠谱回收门店推荐 - 润富黄金回收
  • 保姆级教程:拆解蓝牙调试器的数据包协议,用STC8单片机实现与手机App的稳定通信(附完整代码)
  • C# WinForm版开心消消乐完整工程:含源码、资源、存档与SQLite支持
  • BetterNCM插件管理器:3分钟搞定网易云音乐插件安装的终极方案
  • 白银市黄金回收+白银回收+铂金回收+彩金回推荐收门店 本地靠谱店铺指南及地联系方式址和 - 大熊猫898989
  • Python 3.9核心升级解析:GenericAlias、字典合并与zoneinfo迁移指南
  • 从爬虫到官方导出:我的4000张语义分割数据‘解救’之路与飞桨EasyDL更新评测
  • C# WinForm 与 VP 二次开发
  • 2026年Q2长沙K金回收技术要点及靠谱渠道解析:长沙钻石回收/长沙铂金回收/长沙银元回收/长沙首饰回收/长沙高档礼品回收/选择指南 - 优质品牌商家
  • 2026年石家庄空调移机选对=省心 大为搬家推荐 - 本地品牌推荐
  • 模型无关AI系统:构建可演进的AI服务契约体系
  • LLM开发实战:QLoRA微调与GGUF量化部署指南
  • 乌鲁木齐黄金回收 卖黄金怎么不被坑 实用避坑技巧分享 - 润富黄金回收
  • c++的类型转换
  • 2026苏州登车桥技术解析:移动式卸货平台/移动式液压登车桥/移动式登车桥/移动登车桥/装卸平台/装车平台/集装箱卸货平台/选择指南 - 优质品牌商家
  • 工程师思维:复利|和时间做朋友,你将拥有“长坡厚雪”
  • 惠州黄金回收实测攻略六大门店横评附详细地址与避坑指南 - 润富黄金回收
  • 如何从一名小白成为网安大神(第十天)
  • 大模型容量与上下文窗口:从Token计费到LangGraph工程落地
  • 面向对象的三大特性(封装、继承、多态)
  • 从跳频到定频:深入蓝牙芯片底层,揭秘射频产线测试的‘固定考场’是如何工作的
  • 如何安全合规地撰写AI技术博文:从业者内容创作指南
  • Labelme生成的JSON文件别乱扔!从标注到模型训练的全链路文件管理心得
  • 遗传算法进阶:自适应变异与熵驱动多样性控制
  • STM32F103简易电子琴实战工程:带OLED显示、16键音阶响应与面包板接线图,开箱即烧录
  • 海尔(Haier)空调全国售后服务电话 官方24小时维修客服售后中心 - 故障统计表
  • 告别取模软件!用C语言在51单片机上动态生成16x16点阵滚动字幕
  • 大语言模型推理优化:重复采样如何提升覆盖率与精度
  • 2026成都合成树脂瓦厂家评测:成都PC亮瓦/成都PC锁扣阳光板/成都PP装饰瓦/成都光扩散板/成都合成树脂瓦/选择指南 - 优质品牌商家