go单元测试利器
在 Go 语言中,使用 gomock 进行单元测试是一种常见的做法,特别是当你需要模拟外部依赖时。以下是如何使用 gomock 的基本步骤:
1. 安装 gomock 和 mockgen : 首先,你需要安装 gomock 库和 mockgen 工具,可以使用以下命令:
go get -u github.com/golang/mock/gomock
go install github.com/golang/mock/mockgen
2. 生成 Mock 代码: 使用 mockgen 工具为你的接口生成 mock 实现。例如,如果你的接口定义在 user.go 文件中,你可以使用以下命令来生成 mock 实现:
mockgen -source=user.go -destination=mock_user.go -package=yourpackage
这将生成一个 mock_user.go 文件,其中包含了你的接口的 mock 实现。
3. 编写测试代码: 在你的测试文件中,首先创建一个 gomock.Controller ,然后使用它来创建你的 mock 对象。例如:
ctrl := gomock.NewController(t)
defer ctrl.Finish()
mockObj := NewMockYourInterface(ctrl)
然后,你可以使用 EXPECT() 方法来设置你的 mock 对象的预期行为。例如:
mockObj.EXPECT().YourMethod(gomock.Any()).Return(expectedValue)
4. 运行测试: 使用 go test 命令运行你的测试。
5. 高级用法:
使用 gomock.Eq 、 gomock.Any 等匹配器来匹配参数。
使用 Times 、 MinTimes 、 MaxTimes 等方法来指定方法的调用次数。
使用 gomock.InOrder 来指定方法调用的顺序。
6. 注意事项:
gomock 主要用于模拟接口,而不是具体实现。
使用 defer 来确保 ctrl.Finish() 被调用,以验证 mock 对象的预期行为。
更多详细信息和高级用法,可以参考官方文档或相关教程。
测试接口
type IrpcCheckAllowed interface {
// 测试开关、是否检查权限,方便测试可以关闭
IfCheckRes() bool
// 是否检查token
IfCheckSession() bool
// 根据token获取useid的实现
RpcUserIdGetBySession(ctx *gin.Context, token string) (*webdto.WebUserId, error)
// RPC 设置ctx上下文的CooUserID信息的实现
RpcSetUserId(c *gin.Context) //set *webdto.WebUserId
// RPC 获取ctx上下文的CooUserID信息的 实现
RpcGetUserId(ctx *gin.Context) *webdto.WebUserId
//rpc 检查权限的实现
RpcCheckAllowed(ctx context.Context, req *webdto.WebCheckRequest) (*webdto.WebCheckResult, error)
}测试用例
(*) () {
..().().()
..().().()
..().(..()).(.())
= ..(.)
.()
}
(*) () {
..().().()
..().().()
..().(..()).(.())
= ..(..())
.()
.().(.)
}- 成交数 --
- 成交额 --
- 应答率