gpt4 book ai didi

unit-testing - 当依赖项不公开接口(interface)时,在 GO 中模拟依赖项的最佳方法是什么

转载 作者:IT王子 更新时间:2023-10-29 01:23:44 26 4
gpt4 key购买 nike

我试图模拟 https://gopkg.in/olivere/elastic.v2它被证明是一场噩梦。我通常使用 gomock 但我不能,因为没有用于 dep 的接口(interface)文件。解决此问题的最佳方法是什么?

最佳答案

创建您自己的界面。

也不需要很完整,只需要涵盖你实际使用的方法即可。

假设您有一个类型 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 方法包​​装该方法,以便接口(interface)可以解决它。例如,给定此类型:

type Foo struct {
Name string
}

您可以创建一个包装器:

type FooWrapper struct {
Foo
}

func (w *FooWrapper) Name() string {
return w.Foo.Name
}

现在可以使用自定义接口(interface)访问 Foo 类型进行模拟。

关于unit-testing - 当依赖项不公开接口(interface)时,在 GO 中模拟依赖项的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43550727/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com