也许我表现出对依赖注入(inject)和测试缺乏了解,但我不明白对未实现接口(interface)的类使用依赖注入(inject)如何帮助我进行测试?
例如,在 Enterprise Library 5.0 文档中,它讨论了使用 Unity 容器创建实例。它说这有助于“可测试性:在使用依赖注入(inject)样式时将类与依赖项隔离是微不足道的。” MSDN
如何在我的单元测试装置中使用它?他们的例子有一个构造函数,其参数作为类而不是接口(interface):
public class TaxCalculator
{
private ExceptionManager _exceptionManager;
private LogWriter _logWriter;
public TaxCalculator(ExceptionManager em, LogWriter lw)
{
this._exceptionManager = em;
this._logWriter = lw;
}
}
最佳答案
要回答“我如何测试企业库代码”这个问题:您不需要。测试别人的东西是其他人的工作。 Enterprise Library 或任何其他第 3 方库中的任何接口(interface)或抽象都是为了它们自己的抽象目的而存在,而不是为了您的目的。
您需要做的是定义您自己的接口(interface)来描述您的应用程序的需求(日志记录、缓存、加密等),然后使用企业库(或其他第 3 方库)编写实现您的接口(interface)的适配器。这种做法被称为 Dependency Inversion Principle .
要测试您自己以这种方式设计的代码,对于单元/组件级别的测试,您只需对您自己定义的那些接口(interface)(例如 IMyOwnLogger)使用测试替身。要测试您为适应 3rd 方库而编写的适配器,您需要编写集成测试。要测试它们是否协同工作,您需要编写验收测试,通过 UI 或皮下方式驱动应用。
有关此 View 的更多信息,请查看我的文章:“TDD Best Practices: Don't Mock Others”。
关于c# - 测试依赖于企业库的代码,即使它不提供接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9979481/