Go语言关于单元测试中mock的一些使用

本文介绍了Go语言中进行单元测试时如何使用Mock技术,包括gomock、gomonkey和mockito等框架的使用,以及如何模拟数据库、序列化函数和缓存。详细阐述了go:generate命令生成mock对象的流程,并给出了Mock数据库操作、Mock序列化函数以及对参数赋值的实例。通过Mock,可以更方便地测试代码中的复杂依赖和行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 最简单的一个mock例子

可以使用gomock、gomonkey、mockito等框架实现。

2. Mock数据库

原理:根据使用的ORM,构造出一个相应的句柄(handler),相当于可以理解成生成了一个虚拟数据库,然后在这个虚拟数据库中放入数据,接着调用这个handler中相关的CRUD接口,就可以进行对数据的处理。

参考:
go 单元测试go-sqlmock

3. 使用gomock框架

go:generate主要是要来执行命令的,它会执行//go:generate后面的命令 gomock 模拟对象的方式是让用户声明一个接口,然后使用 gomock 提供的 mockgen 工具生成 mock 对象代码。要模拟( mock )被测试代码的依赖对象时候,即可使用 mock 出来的对象来模拟和记录依赖对象的各种行为 过程: 根据代码中的接口,使用mockgen工具生成mock对象,然后当代码有依赖时,直接对这个对象进行mock即可完成各种行为。

例如,通过下面的代码可以去Mock一个Test接口

//go:generate mockgen -destination=../../mocks/mock_Test.go -package=mocks xx.xx.xx/xxx/xxxx/test Test

4. 对“序列化函数”进行mock,方便构造byte数据

有时候,会遇到入参为byte类型,然后在代码中通过“序列化函数”进行解码,这个时候如果去构造这个byte类型变量就会比较麻烦。简单的做法是,Mock“序列化函数”,返回序列化后的结构体。例如:

Mock(json.Unmarshal).To(func(data []byte, models interface{}) error {
	data := &MockType{
		Id:      1,
		ItemId:     0,
	}
	mx := models.(*MockType)
	*mx = *data
	return nil
}).Build()

5. 对实参进行赋值,使用引用的方式来实现

6. Mock缓存Redis 原理类似与Mock数据库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值