Open geektutu opened 4 years ago
可以实现, gmock 那种第一次调用返回一个值, 第二次调用返回另外一个值吗?
m.EXPECT().Get(gomock.Any()).Return(1, nil).Return(2, nil).
我试了下不行, 2 会覆盖1
例子中 db_test.go 的第6行
m.EXPECT().Get(gomock.Eq("Tom")).Return(0, errors.New("not exist"))
应该是
m.EXPECT().Get(gomock.Eq("Tom")).Return(-1, errors.New("not exist"))
吧。
@naoshi 感谢指出问题,GetFromDB
写错了,err == nil
写成了 err != nil
, 更正为:
func GetFromDB(db DB, key string) int {
if value, err := db.Get(key); err == nil {
return value
}
return -1
}
当 DB.Get() 的第二个返回值为 err 时,GetFromDB() 固定返回 -1,因此 DB.Get() 第一个返回值 value 可以是任何值,不影响测试用例。
写错了:NewMockDB() 的定义在 db_mock.go 中,由 mockgen 自动生成。
@zouzhiwu 已经修复,感谢~
@ericuni 可以实现, gmock 那种第一次调用返回一个值, 第二次调用返回另外一个值吗?
m.EXPECT().Get(gomock.Any()).Return(1, nil).Return(2, nil).
我试了下不行, 2 会覆盖1
@ericuni 可以实现, gmock 那种第一次调用返回一个值, 第二次调用返回另外一个值吗?
m.EXPECT().Get(gomock.Any()).Return(1, nil).Return(2, nil).
我试了下不行, 2 会覆盖1
要单独写两个才行 m.EXPECT().Get(gomock.Any()).Return(1, nil) m.EXPECT().Get(gomock.Any()).Return(2, nil)
请问,如果这个我要测试控制器要怎么搞。。。。
@ericuni 可以实现, gmock 那种第一次调用返回一个值, 第二次调用返回另外一个值吗?
m.EXPECT().Get(gomock.Any()).Return(1, nil).Return(2, nil).
我试了下不行, 2 会覆盖1
要单独写两个才行 m.EXPECT().Get(gomock.Any()).Return(1, nil) m.EXPECT().Get(gomock.Any()).Return(2, nil)
但是加上 AnyTimes() 就失效了
https://geektutu.com/post/quick-gomock.html
gomock 是Go语言/golang 官方提供的mock库,用于在单元测试(unit tests) 中模拟一些依赖复杂,难以直接调用的场景,比如网络请求、数据库依赖和文件I/O等。本文介绍了 gomock 的使用方法,包括模拟参数(Any, Nil, Not, Eq)和返回值(Do, Return, DoAndReturn),以及调用次数(Times) 和顺序(InOrder),如何写可测试可mock的代码。