Выбор ответа Senior Тестирование в Spring обновлено
MockMvc и реальный HTTP
Вопрос
Чем тест через MockMvc отличается от @SpringBootTest(webEnvironment = RANDOM_PORT) с HTTP-клиентом?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: MockMvc без сети в том же потоке; RANDOMPORT это настоящий сервер. MockMvc имитирует запрос на уровне сервлета: быстро, видно всё, включая фильтры Security, но нет настоящего сервера и сериализации по сети.
Варианты ответа
- MockMvc без сети в том же потоке; RANDOM_PORT это настоящий серверправильный ответ
- MockMvc не проверяет JSON ответа, только статус
- RANDOM_PORT не поддерживает Spring Security и сервлетные фильтры приложения
- Разницы нет, оба вызывают DispatcherServlet напрямую
Разбор
MockMvc имитирует запрос на уровне сервлета: быстро, видно всё, включая фильтры Security, но нет настоящего сервера и сериализации по сети. С реальным портом запрос обрабатывает поток Tomcat, поэтому @Transactional на тесте его не охватывает, и данные нужно чистить самому. JSON проверяется в обоих вариантах, Security тоже работает.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.