我试图嘲笑https://gopkg.in/olivere/elastic.v2并且它被证明是一场噩梦。我通常使用gomock但我不能因为没有dep的接口文件。什么是最好的方法呢?
答案 0 :(得分:6)
创建自己的界面。
它甚至不需要完整,它只需要覆盖你实际使用的方法。
假设您的类型Foo
包含以下方法:Bar()
,Baz()
和Qux()
。
你在代码中使用它:
func Frobnicate(f *Foo) err {
if err := f.Bar() error; err != nil {
return err
}
return nil
}
只需更改此选项即可使用新的自定义界面:
type barer interface() {
Bar() error
}
然后更新您的功能签名:
func Frobnicate(f fooer) err {
// The rest the same as before
现在创建自己的fooer
实现,并模拟掉。
如果你需要模拟的类型是一个带有数据的简单结构,而不是使用方法,你可以用getter / setter方法包装方法,这样一个接口就可以解决它。示例,给定此类型:
type Foo struct {
Name string
}
您可以创建一个包装器:
type FooWrapper struct {
Foo
}
func (w *FooWrapper) Name() string {
return w.Foo.Name
}
现在可以使用自定义界面访问Foo
类型进行模拟。