加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

单位测试 – 依赖注射:海龟一路下来?

发布时间:2020-12-14 00:49:54 所属栏目:百科 来源:网络整理
导读:所以我想知道单元测试在处理外部依赖方面是否有效.在这里和其他地方,我已经熟悉依赖注入,以及如何让我们测试一个代码单元(A).然而,我对如何测试其他单元(B和C)感到困惑,这些单元现在拥有外部依赖关系,因此可以将其注入原始单元(A). 例如,说一些类Foo使用外部
所以我想知道单元测试在处理外部依赖方面是否有效.在这里和其他地方,我已经熟悉依赖注入,以及如何让我们测试一个代码单元(A).然而,我对如何测试其他单元(B和C)感到困惑,这些单元现在拥有外部依赖关系,因此可以将其注入原始单元(A).

例如,说一些类Foo使用外部依赖关系…

class Foo
{
    private ExternalDependency ed;
    public int doSomethingWithExternalDependency() {...}
}

而课堂吧

class Bar
{
    public int doSomethingWithFoo
    {
        Foo f = new Foo();
        int x = f.doSomethingWithExternalDependency();
        // Do some more stuff ...
        return result;
    }
}

现在,我知道我可以使用依赖注入,以便我可以测试Foo,但是如何测试吧?我想,我可以再次使用依赖注入,但在某些时候,一些单位需要实际创建外部依赖;那么我该怎么测试那个单位?

您提供的示例不使用依赖注入.相反,Bar应该使用构造函数注入来获取一个Foo实例,但是注入一个具体的类没有意义.相反,您应该从Foo中提取一个接口(让我们称之为IFoo)并将其注入到Bar中:
public class Bar
{
    private IFoo f;

    public Bar(IFoo f)
    {
        this.f = f;
    }

    public int doSomethingWithFoo
    {
        int x = this.f.doSomethingWithExternalDependency();
        // Do some more stuff ...
        return result;
    }
}

这使您始终能够消除消费者和依赖关系.

是的,仍然会有一个地方必须编写整个应用程序的对象图.我们称这个地方为组成根.它是一个应用程序基础架构组件,因此您不需要对其进行单元测试.

在大多数情况下,您应该考虑为该部分使用DI Container,然后应用Register Resolve Release pattern.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读