whirlwind
TDD infected, paranoid
Модульное тестирование контроллеров
Давно пытаюсь подобрать методику для тестирования контроллеров, но что-то она никак не вырабатывается. Сложность тестирования контроллеров заключается в том, что контроллеры работают с разными уровнями приложения, например модель, контекст запроса, апи какого-либо сервиса. Это влечет за собой и сложную фикстуру, которая не укладывается в привычные 5-10 строчек, и много ассертов. Приходится либо городить настройки фикстуры и кучу ассертов в методе теста, либо расширять тесткейс дополнительными ассертами и методами настройки фикстуры.
Другая сложность заключается в том, что контроллеры по своей сути являются клеем между различными слоями приложения и именно в контроллерах возникают большие деревья переходов от состояния к состоянию. И при тестировании состояний на более глубоких уровнях приходится фикстурить прохождение состояний предшествующих уровней. Все это в совокупности негативно сказывается на читабельности теста и в общем-то сводит на нет теста как документации. Проще понять плохой код, чем понять плохой тест.
Ну и что бы не обсуждать сферического коня в вакууме, приведу примеры
Контроллер: http://pastebin.com/SjXcGck9
Тест: http://pastebin.com/fWNHca1W
Я вижу где можно поработать над методом FE_Register::form для сокращения кода и фикстуры теста, например скрыть некоторые запросы к api за фасадом. Но не вижу каким образом можно изменить ситуацию кардинально. Ведь там и так только переходы по состояниям if/else.
Кто как тестирует контроллеры?
Давно пытаюсь подобрать методику для тестирования контроллеров, но что-то она никак не вырабатывается. Сложность тестирования контроллеров заключается в том, что контроллеры работают с разными уровнями приложения, например модель, контекст запроса, апи какого-либо сервиса. Это влечет за собой и сложную фикстуру, которая не укладывается в привычные 5-10 строчек, и много ассертов. Приходится либо городить настройки фикстуры и кучу ассертов в методе теста, либо расширять тесткейс дополнительными ассертами и методами настройки фикстуры.
Другая сложность заключается в том, что контроллеры по своей сути являются клеем между различными слоями приложения и именно в контроллерах возникают большие деревья переходов от состояния к состоянию. И при тестировании состояний на более глубоких уровнях приходится фикстурить прохождение состояний предшествующих уровней. Все это в совокупности негативно сказывается на читабельности теста и в общем-то сводит на нет теста как документации. Проще понять плохой код, чем понять плохой тест.
Ну и что бы не обсуждать сферического коня в вакууме, приведу примеры
Контроллер: http://pastebin.com/SjXcGck9
Тест: http://pastebin.com/fWNHca1W
Я вижу где можно поработать над методом FE_Register::form для сокращения кода и фикстуры теста, например скрыть некоторые запросы к api за фасадом. Но не вижу каким образом можно изменить ситуацию кардинально. Ведь там и так только переходы по состояниям if/else.
Кто как тестирует контроллеры?