Должны ли контроллеры в веб-приложениях MVC быть модульно-тестируемыми?

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

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

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

9
задан Community 23 May 2017 в 12:34
поделиться

2 ответа

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

2
ответ дан 4 December 2019 в 23:38
поделиться

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

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

Тем не менее, у меня все еще есть тенденция к очень слабому освещению некоторых потоков управления на уровне контроллера. Это просто скорее проверка на вменяемость.

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

4
ответ дан 4 December 2019 в 23:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: