登录
首页 >  Golang >  Go问答

比较依赖注入和全局接口

来源:stackoverflow

时间:2024-03-09 23:48:23 142浏览 收藏

亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《比较依赖注入和全局接口》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下,希望所有认真读完的童鞋们,都有实质性的提高。

问题内容

我认为比全局变量更喜欢依赖注入的原因之一是在测试期间模拟全局变量变得很困难。但是假设我将全局声明为接口,我可以避免这个问题。

package restclient
type httpclient interface {
    do(req *http.request) (*http.response, error)
}

var (
    client httpclient
)

func init() {
    client = &http.client{}
}

在上面的示例中,我创建了一个全局接口并将其初始化为 http 客户端。因此,每当我想要进行 rest 调用时,我都会使用这个接口。 现在在我的测试用例中,如果我想模拟http客户端,我需要做的就是

2882​​56633461

那么考虑到简单性,这种使用全局接口的方法不是比使用依赖注入好得多吗?


解决方案


当考虑并行运行多个测试时,这种测试方法的问题开始变得清晰。

一个测试将设置全局变量以便能够使用它进行测试,并且在测试时,它会被下一个测试覆盖,从而导致两个测试都出现不可预测的行为。现在,它们使用相同的依赖项实例相互影响。

注意:实际上,您甚至可以在不启用测试并行执行的情况下遇到该问题。特别是如果依赖项具有内部 goroutine,这些 goroutine 可能会超出其创建的测试的执行范围。

今天关于《比较依赖注入和全局接口》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

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