Как правило, ваш контроллер подключает разные объекты и подключает их в правильном порядке. Возможно, он называет репозиторий, читает некоторые объекты и возвращает их через метод рендеринга. Может быть, он называет некоторых других Хендлеров/Менеджеров, которые делают вещи.
Это означает, что контроллер является компонентом высокого уровня. Чаще всего это указывает на то, что функциональные тесты в порядке, а не модульные тесты. Вы не должны стремиться получать 100% -ный охват кода с помощью модульных тестов. Возможно, вы можете так думать: если вы тестируете все, что вызывает контроллер (модель, валидация, форма, репозиторий), что может пойти не так? В большинстве случаев это то, что вы наблюдаете только при использовании всех реальных классов, участвующих в производстве.
Я хочу также отметить, что TDD не означает, что все должно быть проверено на единицу. Это нормально, чтобы иметь некоторые функциональные тесты для кода высокого уровня. Как сказано, если вы тестируете низкоуровневые компоненты с помощью единичных тестов, вы должны только проверить, как они работают вместе, что вы не можете тестировать с помощью mocks, потому что вы скажете, что mocks указывает на возвращаемое значение.
Если ваш контроллер не только подключает части системы, вы должны подумать о том, как реорганизовать материал на более низкоуровневые классы, которые вы можете протестировать с помощью модульных тестов.
Таким образом, мое предложение было бы использовать функциональные тесты для тестирования ваших контроллеров и использования модульных тестов для тестирования ваших моделей и вашей бизнес-логики.
Если вы боретесь с функциональными пробами, вы можете прочитать следующее:
Что именно проблема с этим возвратом объекта 'Response'? –
Ничего. Мне просто не нравится тот факт, что объект Response создается в контроллере. Я твердо верю в Injection Dependency, и мне не нравится видеть «новое» ключевое слово в чем-либо, кроме контейнера DI. Может быть, эта вера неверна. –