【发布时间】:2009-11-27 08:40:50
【问题描述】:
我正在一个 ASP.NET MVC Web 应用程序上运行 TDD。
创建集成测试以通过 DI 容器(在我的例子中为 Castle Windsor)演示类型的正确实例化是标准做法吗?
如果是这样,你会模拟出容器,还是直接使用它?
或者……这只是出于某种原因没有完成吗?
谢谢。
【问题讨论】:
标签: dependency-injection mocking
我正在一个 ASP.NET MVC Web 应用程序上运行 TDD。
创建集成测试以通过 DI 容器(在我的例子中为 Castle Windsor)演示类型的正确实例化是标准做法吗?
如果是这样,你会模拟出容器,还是直接使用它?
或者……这只是出于某种原因没有完成吗?
谢谢。
【问题讨论】:
标签: dependency-injection mocking
测试驱动开发中的Test这个词通常被解释为UnitTest,而不是IntegrationTest,所以在纯TDD过程中我不认为编写和运行任何类型的集成测试是标准做法。
这并不意味着编写和运行集成测试不值得 - 它只是不被视为 TDD 的标准做法。但是,如果您稍微扩大范围以涵盖一般的敏捷开发,大多数敏捷组织都将其视为维护和运行自动化验收测试的标准部分。
像您询问的那样的集成测试非常适合这种类型的过程。您可能不想在您的开发机器上经常执行此操作,但仍要进行持续集成 (CI) 构建,或者至少每天构建一次(取决于复杂性)。
当您将它们视为验收测试时,让您的 DI 容器按应有的方式解析整个堆栈是最有意义的 - 也就是说,在这种情况下不会涉及任何模拟:您必须测试真正的交易。
然而,底线是:如果它适合你,那就去做。敏捷/精益开发与教条无关——它是关于不断寻找和应用使您的团队最高效的技术。虽然从其他人的错误和成功中吸取教训可能很有价值,但您最终必须试验并衡量最适合您团队的方法。
【讨论】: