使用gomock进行单元测试
下载&安装
go get -u -v github.com/golang/mock/gomock
go get -u -v github.com/golang/mock/mockgen
go install github.com/golang/mock/mockgen
在 mockgen
命令中,支持两种生成模式:
- source:从源文件生成 mock 接口(通过 -source 启用)
mockgen -source=foo.go [other options]
- reflect:通过使用反射程序来生成 mock 接口。它通过传递两个非标志参数来启用:导入路径和逗号分隔的接口列表
mockgen database/sql/driver Conn,Driver
从本质上来讲,两种方式生成的 mock 代码并没有什么区别。因此选择合适的就可以了
生成mock代码
mockgen -source=<interface源文件> -destination=<目标文件> -package <目标文件的包名>
例如:
mockgen -source=backend.go -destination=backend_mock_test.go -package cluster
使用mock进行单元测试
mock的使用可以参考:使用 Gomock 进行单元测试
func TestGet(t *testing.T){
// new mock controller
mockctl := gomock.NewController(t)
defer mockctl.Finish()
// backend 实现接口
backend := NewMockBackend(mockctl)
// 对方法进行mock
backend.EXPECT().Get(gomock.Any()).Return(1, nil)
h := NewHandler(backend)
t.Run(testCase.Name, func(t *testing.T) {
h.Get(1)
})
}
统计测试覆盖率
go test -coverpkg ./... -coverprofile cover.out ./... -v
- -coverpkg 指定要统计覆盖率的包 ./… 表示当前目录下的包
- -coverprofile 指点输出的文件
- -v 显示详细信息
go tool cover -func cover.out
显示测试覆盖率信息