当遇到这种情况时,我的方法是使用自己的接口作为包装程序,从而可以在测试中进行模拟。例如。
type MyInterface interface { DoSomething(i int) error DoSomethingElse() ([]int, error)}type Concrete struct { client *somepackage.Client}func (c *Concrete) DoSomething(i int) error { return c.client.DoSomething(i)}func (c *Concrete) DoSomethingElse() ([]int, error) { return c.client.DoSomethingElse()}现在,您可以以与模拟
somepackage.Client接口相同的方式模拟混凝土。
正如@elithrar在下面的注释中指出的那样,您可以嵌入要模拟的类型,因此只需要添加需要模拟的方法即可。例如:
type Concrete struct { *somepackage.Client}当这样做时,
DoSomethingNotNeedingMocking可以直接调用其他方法,
Concrete而不必将其添加到接口中或将其模拟出来。



