Rob*_*ett 4 c# dependency-injection ninject asp.net-mvc-3
我有一个服务(AccountService),它有大约八种方法.其中一种方法发送电子邮件.我有另一个服务(EmailService),它是注入AccountService的构造函数.
我想知道是否有必要这样做,因为感觉就像每次我添加一个依赖于一个方法的功能我必须改变我的所有测试,我在模拟构造函数的依赖项.这感觉就像DI实际上更难改变事物,而不是更容易.
所以我正在考虑在我的控制器操作中使用DependencyResolver,它调用AccountService来获取EmailService并将其传入.但是,这会影响我的测试吗?
我将如何测试使用依赖性解析器的控制器操作?鉴于帐户服务是由ninject注入AccountController的构造函数.
干杯.
不要在Controller中使用DependencyResolver!只需使用它来使用Ninject创建控制器(请参阅https://github.com/ninject/ninject.web.mvc/wiki).其他所有内容都应该由Ninject使用构造函数注入创建.
实际上,使用适当的DI进行单元测试以及遵循SOLID原则的设计非常简单.
在测试夹具设置中,除了使用创建的模拟作为依赖项为每个依赖项和被测对象的实例创建(动态)模拟之外,您什么都不做.这样,您必须为每个类的所有测试调用构造函数一次.
如果测试很难,那不是因为DI,而是因为不遵循SOLID原则(很可能是单一责任原则),或者是因为测试结果不好,例如使用真实依赖关系而不是模拟或在测试夹具中做太多的单元测试建立.