使用Ninject时如何正确实例化新控制器?

时间:2013-05-08 17:15:55

标签: unit-testing .net-4.0 dependency-injection

我创建了一个使用Ninject的演示Web API应用程序。应用程序工作正常,因为我可以运行它,导航到定义的路线,并获得我期望的数据。现在我想开始添加单元测试来测试ApiController。

如何实例化新的ApiController?我正在使用var sut = new DogsController();但是会​​导致错误,“...不包含带0参数的构造函数”。这是正确的我没有一个带0参数的构造函数,但是Ninject应该为我处理这个,对吗?我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您将Ninject连接到Web API应用程序,而不是单元测试项目。因此,Ninject将不会为您的控制器甚至控制器创建依赖项,因为您正在显式创建它(在Web API应用程序中,框架会创建您的控制器)。

您可以将Ninject连接到您的单元测试项目中,但这不是正确的做法。您应该在具有已知状态的测试中创建控制器,因此您应该传入已知的依赖项,或者传递某种形式的模拟依赖项。

答案 1 :(得分:0)

每次写“new Something()”时,DI容器都不会改变你的代码。在你的单元测试中,你手动修改控制器(这是一个很好的练习顺便说一句),但这意味着你必须为构造函数提供构造函数所期望的抽象的正确伪造版本。