2013-05-08 2 views
0

Я создал демонстрационное приложение веб-API, которое использует Ninject. Приложение работает нормально, так как я могу запустить его, перейти к определенному маршруту и ​​получить данные, которые я ожидаю. Теперь я хочу начать добавление модульных тестов для тестирования ApiController.Как правильно создать новый контроллер при использовании Ninject?

Как создать новый ApiController? Я использую var sut = new DogsController();, но это приводит к ошибке: «... не содержит конструктор, который принимает 0 аргументов». Правильно, у меня нет конструктора, который принимает 0 аргументов, но Ninject должен заботиться об этом для меня, правильно? Как это разрешить?

ответ

1

У вас будет проводной Ninject в приложении API веб-приложений, а не на ваш проект модульного тестирования. В результате Ninject не будет создавать зависимости для вашего контроллера или даже вашего контроллера, поскольку вы явно его создаете (в приложении Web API фреймворк создает ваш контроллер).

Вы можете подключить Ninject к вашему модульному тестовому проекту, но это было бы неправильно. Вы должны создать свой контроллер в своих тестах с известным состоянием, поэтому вы должны либо проходить в известных зависимостях, либо передавать в какой-то форме макет зависимостей.

0

Контейнер DI - это не часть волшебства, которая преобразует ваш код каждый раз, когда вы пишете «New Something()». В вашем модульном тестировании вы вводите новый контроллер вручную (что является хорошей практикой), но это означает, что вам нужно будет снабдить конструктор соответствующими фальшивыми версиями абстракций, которые ожидает конструктор.

Смежные вопросы