4C7AD81C-DECF-4C23-802B-9F02EFF42C48.jpg
在Golang的官方Repo(https://github.com/golang/)中有一个单独的工程叫"mock"(https://github.com/golang/mock),虽然star不是特别多,但它却是Golang官方放出来的mock工具,充这这点我们也需要使用下,虽然并不是官方的就是最好(比如比标准库http更快的fasthttp)。
不同场景mock的对象互相不同,那么gomock主要是mock哪些内容呢?
mockgen has two modes of operation: source and reflect. Source mode generates mock interfaces from a source file.
Reflect mode generates mock interfaces by building a program that uses reflection to understand interfaces.
通过gomock的辅助工具我们知道,gomock主要是针对我们go代码中的接口进行mock的。
安装
gomock主要包含两个部分:" gomock库"和“ 辅助代码生成工具mockgen”
他们都可以通过go get来获取:
go get github.com/golang/mock/gomock
go get github.com/golang/mock/mockgen
如何你设置过$GOPATH/bin到你的$PATH变量中,那么这里就可以直接运行mockgen命令了,否则需要使用绝对路径或者相当于$GOPATH的目录。
示例
gomock的repo中带了一个官方的例子,但是这个例子过于强大和丰富,反而不适合尝鲜,下面我们写个我们自己的例子(https://www.github.com/cz-it/blog/blog/Go/testing/gomock/example),一个获取当前Golang最新版本的例子:
tree .
.
├── go_version.go
├── main.go
└── spider
└── spider.go
目录结构如上。这里spider.go作为接口文件,定义了spider包的接口:
package spider
type Spider interface {
GetBody() string
}
这里假设接口GetBody直接可以抓取"https://golang.org"首页的“Build version”字段来得到当前Golang发布出来的版本。
这里在go_version.go中对这个接口进行使用:
import (
"github.com/cz-it/blog/blog/Go/testing/gomock/examp