测试依赖于 Castle Windsor 进行配置的 MVC 控制器的最佳方法是啥?

Posted

技术标签:

【中文标题】测试依赖于 Castle Windsor 进行配置的 MVC 控制器的最佳方法是啥?【英文标题】:What's the best way to test MVC controllers that rely on Castle Windsor for configuration?测试依赖于 Castle Windsor 进行配置的 MVC 控制器的最佳方法是什么? 【发布时间】:2015-02-18 18:43:17 【问题描述】:

我正在尝试在 ASP.NET MVC 控制器上定义一些验收测试。正如您可能期望的那样,我的测试在单独的测试应用程序的上下文中运行。我的 MVC 控制器需要在应用程序的上下文中运行 - 即在为 MVC 项目定义的 web.config 之上。该项目正在使用 Castle Windsor 实例化实时项目中的依赖项。

我希望我的测试直接实例化 MVC 控制器,而不是作为 HTTP 客户端运行。

过去我们通过将 web.config 从 web 项目复制到测试项目来完成此操作,但随着时间的推移,这已成为维护的噩梦,必须在每次进行更改时跟踪依赖链。

有没有更合适的方法来测试这个堆栈而不

    复制导致维护噩梦的 Web 配置 让我们的验收测试通过 http 以客户端/服务器方式运行

【问题讨论】:

“我希望我的测试直接实例化 MVC 控制器”这是一个主要问题,因为您已经知道 MVC 控制器与 MVC 框架紧密耦合。这很可能是 Freeman 在他的优秀著作中很早就开始使用单元测试并向开发人员展示如何将接口用于控制器参数的原因。当代码执行此操作时,您可以注入任何您想要的东西......当它没有时,您只有客户端方法......其他考虑可能是控制器中根本没有任何逻辑。他们只更新 ViewModel 并将它们传递给视图。 【参考方案1】:

过去,我是exposed my application settings through an interface。让我在测试期间模拟它们,从而无需在 Web 项目和测试项目之间复制这些设置。

对于 MVC 控制器的单元测试,如果您使用基于 HTTP 上下文的对象(如 Request、Repsonse、Session 等),您可能必须使用一些帮助程序库...我有 used MVC Contrib in the past 来做这种事情。

【讨论】:

以上是关于测试依赖于 Castle Windsor 进行配置的 MVC 控制器的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

依赖注入 Castle.Windsor高级应用

Castle.Windsor依赖注入的高级应用

使用 Castle Windsor 进行 WCF 依赖注入 - 请帮忙?

对Castle Windsor的Resolve方法的解析时new对象的探讨

使用 Castle Windsor 解析 HttpControllerContext

castle windsor学习-----Inline dependencies 依赖