0

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

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

4

2 回答 2

1

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

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

于 2013-05-11T22:29:36.837 回答
0

DI 容器并不是每次您编写“new Something()”时都会转换您的代码的魔法。在您的单元测试中,您正在手动更新控制器(顺便说一句,这是一个很好的做法),但这意味着您必须为构造函数提供构造函数期望的正确的假冒版本的抽象。

于 2013-05-12T10:45:08.020 回答