Обычно ваш контроллер объединяет разные объекты и соединяет их в правильном порядке. Может он вызывает репозиторий, читает какие-то объекты и возвращает их через метод рендера. Может быть, он звонит другим хендлерам/менеджерам, которые занимаются этим.
Это означает, что контроллер является компонентом высокого уровня. Чаще всего это указывает на то, что функциональные тесты в порядке, а не модульные тесты. Вы не должны стремиться получить 100% покрытие кода своими модульными тестами. Может быть, вы можете думать об этом так: если вы выполняете модульное тестирование всего, что вызывает контроллер (модель, проверка, форма, репозиторий), что может пойти не так? В большинстве случаев это то, что вы наблюдаете только при использовании всех реальных классов, задействованных в производстве.
Я также хотел бы отметить, что TDD не означает, что все должно подвергаться модульному тестированию. Можно провести несколько функциональных тестов высокоуровневого кода. Как уже говорилось, если вы тестируете низкоуровневые компоненты с помощью модульных тестов, вы должны проверять только то, как они работают вместе, что вы не можете протестировать с помощью макетов, потому что вы сообщаете макетам, что такое возвращаемое значение.
Если ваш контроллер делает больше, чем соединение частей системы вместе, вам следует подумать о рефакторинге этого материала в более низкоуровневые классы, которые вы можете протестировать с помощью модульных тестов.
Поэтому я предлагаю использовать функциональные тесты для тестирования ваших контроллеров и использовать модульные тесты для тестирования ваших моделей и вашей бизнес-логики.
Если вы боретесь с функциональными тестами, вы можете прочитать следующее:
12.04.2012