我们正在使用gopkg.in/mgo.v2/bson与mongo交谈,其API填充传递结构而不是返回结果,例如:
func (p *Pipe) One(result interface{}) error {...
当我想模拟/测试使用它的代码时会出现问题。我想要模拟这个执行,并以某种方式在'结果'中获得瞳孔值。 目前测试有:
query.EXPECT().One(gomock.Any())
因为你可以看到我没有得到任何价值,我只是配置gomock来检查当我运行我的方法然后query.One必须被调用。 我不能传递像
这样的结构mystruct := MyStruct{}
query.EXPECT().One(&mystruct)
因为测试代码和实际代码中的mystruct不同,并且验证mock会失败(引用不同)。我正在寻找类似于mockito的论证捕获者的东西: https://static.javadoc.io/org.mockito/mockito-core/2.6.9/org/mockito/ArgumentCaptor.html
答案 0 :(得分:1)
这可以通过Do实现。
从poy复制并粘贴Github示例。
var capturedArgs []int
someMock.
EXPECT().
SomeMethod(gomock.Any()).
Do(func(arg int){
capturedArgs = append(capturedArgs, arg)
})
答案 1 :(得分:0)
此项目可以帮助您:https://github.com/bouk/monkey。 您可以替换函数并使用bool变量来检查使用情况。
called := false
monkey.Patch(package.One, func(result interface{}) error {
if result == expected {
called := true
return nil
}
return errors.new("not expected")
})
别忘了恢复原来的功能。
defer monkey.Unpatch(package.One)