asp.net-mvc – 如何在没有IoC容器的情况下对您的控制器进行单元
在构建我最新的ASP.NET MVC项目时,我开始进入单元测试,依赖注入和所有爵士乐.
我现在想要单元测试我的控制器,我很难搞清楚如何在没有IoC容器的情况下正确地执行此操作. 以一个简单的控制器为例: public class QuestionsController : ControllerBase { private IQuestionsRepository _repository = new SqlQuestionsRepository(); // ... Continue with various controller actions } 由于它直接实例化SqlQuestionsRepository,因此该类不是单元可测试的.那么,让我们沿着Dependancy Injection路线行进并做: public class QuestionsController : ControllerBase { private IQuestionsRepository _repository; public QuestionsController(IQuestionsRepository repository) { _repository = repository; } } 这似乎更好.我现在可以使用模拟IQuestionsRepository轻松编写单元测试.但是,现在要实例化控制器的是什么?在调用链SqlQuestionRepository的某个地方必须进行实例化.似乎我只是简单地将问题转移到别处,而不是摆脱它. 现在,我知道这是一个很好的例子,IoC容器可以通过为我配置控制器依赖性来帮助您,同时保持我的控制器易于单元测试. 我的问题是,如何在没有IoC容器的情况下对这种性质的东西进行单元测试? 注意:我不反对IoC容器,我很快就会走这条路.但是,我很好奇对于那些不使用它们的人来说,替代方案是什么. 解决方法
是不是可以保持字段的直接实例化并提供setter?在这种情况下,您只需在单元测试期间调用setter.像这样的东西:
public class QuestionsController : ControllerBase { private IQuestionsRepository _repository = new SqlQuestionsRepository(); // Really only called during unit testing... public QuestionsController(IQuestionsRepository repository) { _repository = repository; } } 我不太熟悉.NET,但作为Java的旁注,这是重构现有代码以提高可测试性的常用方法. I.E.,如果您有已经在使用的类并且需要修改它们以便在不破坏现有功能的情况下提高代码覆盖率. 我们的团队之前已经这样做了,通常我们将setter的可见性设置为package-private并保持测试类的包相同,以便它可以调用setter. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 为什么OutputCache是??ASP.NET MVC中的结果过滤器而不是动作
- asp.net – DBMS如何影响应用程序性能?和Informix GUI工具
- asp.net-mvc-3 – MVC3和认证
- asp.net-mvc – 在NerdDinner中首次尝试Linq to Sql – 规则
- asp.net-mvc – ActionFilterAttributes是否跨线程重用?如
- asp.net-mvc-3 – SignalR依赖注入问题
- asp.net-mvc – 元素’标题’出现次数太少,ASP.NET.MVC母版
- asp.net – nhibernate配置和buildsessionfactory时间
- 经过几个小时的使用后,ASP.NET Web应用程序是否会“静止”?
- asp.net-mvc – 使用javascript的Mvc ActionLink
- 事件(Event),绝大多数内存泄漏(Memory Leak)的
- asp.net-mvc – 授权属性生命周期
- asp.net-mvc – 从控制器内部使用Html.ActionLin
- asp.net-mvc – 设置MVC 3 rc1 Razor cshtml文件
- ninject – 为从ASP.NET MVC和工作者应用程序使用
- asp.net-mvc – 数据注释 – 如何用MVC3中的Web.
- asp.net-mvc – 在扩展方法中使用IoC
- asp.net-mvc – 如何在ASP.NET应用程序中设置S-M
- asp.net-web-api – Web API中的Actions和QueryS
- asp.net-mvc – ASP.NET MVC响应过滤器OutputCac