Выбор ответа Senior Тестирование в Spring обновлено

MockMvc и реальный HTTP

Вопрос

Чем тест через MockMvc отличается от @SpringBootTest(webEnvironment = RANDOM_PORT) с HTTP-клиентом?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: MockMvc без сети в том же потоке; RANDOMPORT это настоящий сервер. MockMvc имитирует запрос на уровне сервлета: быстро, видно всё, включая фильтры Security, но нет настоящего сервера и сериализации по сети.

Варианты ответа

  1. MockMvc без сети в том же потоке; RANDOM_PORT это настоящий серверправильный ответ
  2. MockMvc не проверяет JSON ответа, только статус
  3. RANDOM_PORT не поддерживает Spring Security и сервлетные фильтры приложения
  4. Разницы нет, оба вызывают DispatcherServlet напрямую

Разбор

MockMvc имитирует запрос на уровне сервлета: быстро, видно всё, включая фильтры Security, но нет настоящего сервера и сериализации по сети. С реальным портом запрос обрабатывает поток Tomcat, поэтому @Transactional на тесте его не охватывает, и данные нужно чистить самому. JSON проверяется в обоих вариантах, Security тоже работает.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.