登录
首页 >  Golang >  Go问答

模拟三层嵌套依赖项的方法

来源:stackoverflow

时间:2024-03-01 19:54:25 175浏览 收藏

Golang不知道大家是否熟悉?今天我将给大家介绍《模拟三层嵌套依赖项的方法》,这篇文章主要会讲到等等知识点,如果你在看完本篇文章后,有更好的建议或者发现哪里有问题,希望大家都能积极评论指出,谢谢!希望我们能一起加油进步!

问题内容

第三方 api 用法示例:

fund dosomething(api *api.client) {
    ...
    result, err := api.logical().write(val1, val2)
    ...
}

我可以使用自己的界面处理对 logical() 的初始调用:

type api interface {
    logical() *api.logical
}

...

dosomething(&mockapi{}) // assuming mockapi implements api

但是,现在问题出现了:logical() 方法必须具有上述函数签名,否则,我无法用真正的 api 对象替换我的接口。由于 *api.logical 类型嵌套在第三方 api 库中,因此我不能简单地用另一个接口模拟它:

type Writer interface {
    Write(string, string) Result, error
}

type API interface {
    Logical() *Writer
}

...

doSomething(&api.Client{}) // Doesn't implement Logical() *Writer

我如何模拟此 api 调用,以便可以返回自定义数据而不使用实时服务?如果有帮助,这是基于实际的 api。


解决方案


我认为最好的答案是完全避免链式函数调用。

type Writer interface {
    Write(string, string) Result, error
}

func doSomething(writer Writer) {
    ...
    result, err := writer.Write(val1, val2)
    ...
}

...

doSomething(api.Client.Logical())

现在我可以实现自己的 writer 并将其用于模拟。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>