所以我想知道单元测试如何处理外部依赖项。在这里和其他地方,我已经熟悉了依赖注入,以及它如何允许我们测试代码单元 (A)。但是,我对如何测试其他单元(B 和 C)感到困惑,这些单元现在拥有外部依赖项,以便它们可以将其注入到原始单元(A)中。
例如,说某堂课Foo使用外部依赖项...
class Foo
{
private ExternalDependency ed;
public int doSomethingWithExternalDependency() {...}
}
和班级Bar使利用关闭Foo...
class Bar
{
public int doSomethingWithFoo
{
Foo f = new Foo();
int x = f.doSomethingWithExternalDependency();
// Do some more stuff ...
return result;
}
}
现在,我知道我可以使用依赖注入,以便我可以测试Foo,但是我该如何测试Bar?我想,我可以再次使用依赖项注入,但在某些时候,某些单元需要实际创建外部依赖项;那么我该如何测试该单元呢?
您提供的示例不使用依赖注入。相反,Bar 应该使用构造函数注入获取 Foo 实例,但注入没有意义concrete班级。相反,你应该提取接口从 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容器对于该部分,然后应用注册 解决 发布 模式 http://blog.ploeh.dk/2010/09/29/TheRegisterResolveReleasePattern.aspx.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)