gpt4 book ai didi

unit-testing - 依赖注入(inject) : Turtles all the way down?

转载 作者:行者123 更新时间:2023-12-03 14:47:23 24 4
gpt4 key购买 nike

所以我想知道单元测试在处理外部依赖项方面是如何工作的。在这里和其他地方,我已经熟悉依赖注入(inject),以及它如何使我们能够测试代码单元 (A)。但是,我对如何测试现在拥有外部依赖关系的其他单元(B 和 C)感到困惑,以便他们可以将其注入(inject)原始单元(A)。

例如,假设某个类 使用外部依赖...

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;
}
}

现在,我知道我可以使用依赖注入(inject)来测试 ,但是我该如何测试 酒吧 ?我想,我可以再次使用依赖注入(inject),但在某些时候,某些单元需要实际创建外部依赖;那么我该如何测试那个单元呢?

最佳答案

您提供的示例不使用依赖注入(inject)。相反,Bar 应该使用 构造函数注入(inject) 获取 Foo 实例,但注入(inject) 没有意义混凝土 类(class)。相反,您应该 提取接口(interface)从Foo(我们称之为IFoo)并将其注入(inject)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 容器 对于该部分,然后应用 Register Resolve Release pattern .

关于unit-testing - 依赖注入(inject) : Turtles all the way down?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4570750/

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