2017-04-21 37 views
2

我试着去嘲笑https://gopkg.in/olivere/elastic.v2其被证明是一场噩梦的最佳方式。我通常使用gomock,但我不能因为theres没有接口文件的dep。什么是最好的方式去做这件事?什么是嘲笑在GO的依赖时的依赖性不公开的接口

+6

您可以自行定义的接口封装的任何出口的功能,记得在Go接口,实现** **隐。 – mkopriva

+0

@mkopriva这就是我一直试图做的,但问题是,我必须回到在包中创建创建我的接口,这导致了许多问题 –

+2

sepcifically什么问题结构?您介意更新您的问题并描述这些具体问题吗? – mkopriva

回答

5

创建自己的界面。

它甚至不需要是完整的,或者说,只需要支付实际使用的方法。

假设您的类型为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类型可以使用自定义的界面嘲讽访问。

+0

应该标记为答案; –

+0

这太好了,你介意在getter/setter想法上详细阐述 –

+0

@DanielKobe更新。 – Flimzy