gpt4 book ai didi

c# - 测试依赖于企业库的代码,即使它不提供接口(interface)?

转载 作者:太空狗 更新时间:2023-10-29 22:11:04 24 4
gpt4 key购买 nike

也许我表现出对依赖注入(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/

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