Должны ли контроллеры в веб-приложениях MVC быть модульно-тестируемыми? - PullRequest
9 голосов
/ 05 августа 2010

Мне кажется, что веб-разработчики разных языков программирования часто разделяют разные мнения по этому поводу.Например, веб-разработчики Ruby (с доминирующей средой Rails), похоже, считают контроллеры связующим кодом, который должен иметь функциональные тесты, а не модульные тесты.Подобное отношение преобладает в мире PHP, хотя была и некоторая инициатива (например, Symfony2).

Однако, также кажется, что, например, некоторые разработчики ASP.NET MVC на самом деле хотят свои контроллеры , чтобы быть тестируемым на модуле .

Я хотел бы знать, действительно ли это работает в веб-разработке.Стоит ли тестировать контроллеры?Заметно ли их тестирование на тестирование на единицах наносит ущерб скорости разработки в нетривиальных приложениях?Кроме того, пытались ли какие-либо веб-фреймворки обеспечить тестируемость модулей контроллера?Личный опыт приветствуется.

Ответы [ 3 ]

4 голосов
/ 05 августа 2010

Короткий ответ: «Да» с «Если», длинный ответ: «Нет» с «Но».

В наши дни я склонен пропускать юнит-тесты на уровне контроллера в пользу сильного юнит-тестирования моделей и бизнес-объектов и функционального тестирования с Cucumber.Здесь предполагается, что контроллеры являются очень легковесными объектами, перенаправляющими данные в базовые модели, которые инкапсулируют подавляющее большинство бизнес-логики.

Тем не менее, я все же склонен иметь некоторое очень легкое покрытие некоторых элементов управленияпоток на уровне контроллера.Это просто более здравый смысл.

Одной из проблем при тестировании на уровне контроллера является то, что вам часто приходится либо имитировать, либо создавать большое количество моделей и объектов для эффективного тестирования.Учитывая это, я считаю более ценным подтолкнуть эти тесты к функциональным уровням, где стиль тестирования позволяет более эффективно выражать эти зависимости (либо явным образом выполняя шаги, необходимые для их генерации через само приложение, либо через систему, подобную системе).Декларативные правила огурца).

2 голосов
/ 05 августа 2010

Все стоит быть проверенным модулем.В этом случае это зависит от того, сколько логики реализовано в контроллерах ... В небольшом проекте у вас не может быть никакой внешней логики, и вы можете захотеть выполнить некоторые операции с базой данных на вашем контроллере (как во многих примерах Microsoft),В более крупных решениях вам может не потребоваться тестировать контроллер, поскольку его задача - просто вызывать определенные методы бизнес-логики ... Дело не в том, стоит ли проверять модули в контроллерах, а в том, является ли содержащийся в них код ....

0 голосов
/ 29 августа 2011

Одной из лучших особенностей шаблона MVC является то, что контроллеры можно тестировать изолированно от выходных данных HTML представлениями. Страницы, которые смешивают логику с выводом HTML, сложно протестировать, и это одна из проблем, которую решает MVC - он заставляет ваш контроллер полностью ориентироваться в логике, и вы можете тестировать его, вообще не анализируя HTML.

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

...