Что такое паттерн MVC
Что проверяют
Для тестировщика это вопрос не про паттерны ради паттернов, а про умение понять, где в приложении живёт логика и на каком уровне искать баг. Следом обычно спрашивают: «данные в базе сохранились, а на экране старые, где проблема?» или «как MVC влияет на то, какие тесты вы пишете».
Как отвечать
MVC делит приложение на три роли:
- Model: данные и бизнес-правила. Это не таблица в базе, а логика: расчёт скидки, проверка остатка, валидация, которая обязана работать независимо от интерфейса;
- View: отображение. Получает готовые данные и показывает их, решений не принимает;
- Controller: принимает запрос или действие пользователя, вызывает модель и выбирает, какое представление вернуть.
В веб-фреймворках это выглядит так: в Spring MVC контроллер помечен @Controller или @RestController, в ASP.NET Core MVC и Ruby on Rails схема та же, в Django её называют MTV. В современных проектах бэкенд часто отдаёт JSON, а View живёт отдельно во фронтенде на React или Vue, который устроен по своей схеме, ближе к MVVM.
Для QA из этого следует разделение проверок:
- Model закрывают юнит-тесты и проверки API: бизнес-правило должно срабатывать и без браузера;
- Controller проверяют через API: коды ответа, обработку неверных параметров, права доступа;
- View проверяют через UI: отображение, форматирование, состояния загрузки и ошибок.
Локализация бага идёт по той же схеме. Сервер вернул правильные данные, а на экране другое, значит ошибка в представлении. Неверный ответ API указывает на контроллер или модель.
Где спотыкаются
Отождествляют Model с базой данных. Тогда на вопрос «где проверяется, что нельзя заказать больше, чем есть на складе» ответ получается «в базе», и интервьюер понимает, что логику вы не различаете.
Приравнивают MVC к делению на фронтенд и бэкенд. Бэкенд сам может быть устроен по MVC, а фронтенд использовать другую схему.
Говорят «MVC упрощает тестирование», не объясняя как. Сильнее сказать, что правило из модели проверяется на уровне API быстрее и надёжнее, чем кликами по форме, а валидация, которая есть только во View, обходится одним запросом через curl.