是否有任何选项可以使用类似于mockito参数捕获器的东西?

fre*_*man 3 unit-testing go mockito gomock

我们使用 gopkg.in/mgo.v2/bson 与 mongo 对话,它的 API 填充传递的结构而不是返回结果,例如:

func (p *Pipe) One(result interface{}) error {...
Run Code Online (Sandbox Code Playgroud)

当我想模拟/测试使用它的代码时,就会出现问题。我想模拟这个执行并以某种方式获得“结果”中的填充值。目前测试有:

query.EXPECT().One(gomock.Any())
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我没有获得任何值,我只是配置 gomock 来检查当我运行我的方法时是否必须调用 query.One 。我无法通过这样的结构

mystruct := MyStruct{}
query.EXPECT().One(&mystruct)
Run Code Online (Sandbox Code Playgroud)

因为测试代码中的 mystruct 和实际代码中的 mystruct 不同,验证模拟将失败(引用不同)。我正在寻找类似于mockito的参数捕获器的东西: https ://static.javadoc.io/org.mockito/mockito-core/2.6.9/org/mockito/ArgumentCaptor.html

Pau*_*ang 8

这可以通过Do来实现。

从poy复制并粘贴 Github 示例。

var capturedArgs []int

someMock.
  EXPECT().
  SomeMethod(gomock.Any()).
  Do(func(arg int){
    capturedArgs = append(capturedArgs, arg)
  })
Run Code Online (Sandbox Code Playgroud)

参考:https: //github.com/golang/mock/pull/149