工作中,很多公司都要求效能,要求自动化测试
实际落地的过程中发现,要做单元测试,自动化测试,可能当前这个服务会依赖其他服务的数据,接口等等
那么单测或者自动化的过程中,就可能会由于其他服务的原因或者环境因素导致测试失败,或者阻塞测试
这是一个问题,必须得解决,我们可以采用 golang 自带的 mock 工具来完成,可以在一些必要的地方进行数据打桩,mock 数据
gomock 是什么?
是官方提供的 一个 mock 数据的 框架
官方还提供了 mockgen 工具用来帮助 我们 生成测试代码
github 上项目地址是:https://github.com/golang/mock
官方是这样介绍 gomock 的:
gomock 是一个用于Go 编程语言的 mocking 框架。它与 Go 的内置测试包集成得很好,但也可以在其他环境中使用。
如何使用 gomock?
使用 gomock 也是非常简单的,先 go get 对应的 工具 gomock 和 mockgen
go get -u github.com/golang/mock/gomock
go get -u github.com/golang/mock/mockgen
可以写一个 demo 来进行实践
目录结构是这样的
gomock_test
├── go.mod
├── go.sum
├── main.go
└── myfunc
├── mock_myfunc.go
├── myfunc.go
├── myuser.go
└── myuser_test.go
- mock_myfunc.go 是使用 mockgen 工具生成的
- myfunc.go 主要是用于模拟调用的底层实现
- myuser.go 主要是去调用 myfunc.go 里面的接口
- myuser_test.go 是 对应的单测文件
myfunc.go
- 编写一个 接口,里面有一个
GetInfo() string
方法,模拟获取信息
package myfunc
type MyFunc interface {
GetInfo() string
}
myuser.go
- 调用 myfunc.go 中的方法,调用接口获取信息
package myfunc
func getUser(m MyFunc) string {
user := m.GetInfo()
return user
}
mock 文件的生成
mock_myfunc.go
这个文件不是我们自己写的,是通过 mockgen 工具生成的 ,生成方式如下:
在 myfunc.go 的同级目录下执行如下语句,填入 source 源文件 和 目标文件即可生成新的 mock 文件
mockgen -source=myfunc.go -destination