@AutoConfigureMockMvc Flashcards
Что такое @AutoConfigureMockMvc
Это аннотация, которая настраивает и инициализирует компонент MockMvc для тестирования Spring MVC контроллеров без запуска веб-сервера.
Для чего используется @AutoConfigureMockMvc
Аннотация используется для автоматической настройки MockMvc, что позволяет проводить тестирование HTTP запросов и ответов к контроллерам Spring в изолированной среде, не поднимая настоящий сервер.
Как работает MockMvc
MockMvc имитирует запросы к вашему приложению, позволяя тестировать его контроллеры, фильтры, и другие компоненты MVC, без необходимости запуска сервера или браузера.
Обязательно ли использовать @SpringBootTest вместе с @AutoConfigureMockMvc
Да, @AutoConfigureMockMvc обычно используется вместе с @SpringBootTest, чтобы загружать весь контекст приложения и тестировать контроллеры на уровне MVC.
Загружает ли @AutoConfigureMockMvc веб-сервер?
Нет, @AutoConfigureMockMvc создает среду для тестирования контроллеров без запуска реального веб-сервера, используя подделанный (mock) HTTP слой.
Как использовать MockMvc для выполнения HTTP-запросов
Вы можете инжектировать MockMvc через @Autowired и использовать методы вроде perform(), чтобы имитировать HTTP-запросы (GET, POST, PUT и т.д.) и проверять ответы контроллеров.
Как настроить запросы с параметрами в MockMvc
Для создания запросов с параметрами можно использовать методы param() и queryParam() в MockMvc, например:
mockMvc
.perform(get(“/example”)
.param(“key”, “value”))
Как проверить HTTP-ответы с использованием MockMvc
Вы можете использовать методы andExpect() для проверки различных аспектов HTTP-ответа: статус кода, тело ответа, заголовки, например:
mockMvc
.perform(get(“/example”))
.andExpect(status().isOk())
.andExpect(content().string(“Expected response”));
Как тестировать контроллеры, защищенные авторизацией
Для тестирования контроллеров с защитой можно использовать MockMvc вместе с @WithMockUser для имитации аутентифицированного пользователя или использовать метод
mockMvc
.perform(with(SecurityMockMvcRequestPostProcessors
.user(“username”)))
Как мокировать слои сервиса в тестах с @AutoConfigureMockMvc
Вместе с @AutoConfigureMockMvc можно использовать аннотацию @MockBean для подмены (mocking) зависимостей, таких как сервисы или репозитории, чтобы тестировать контроллеры в изоляции.
Можно ли использовать @AutoConfigureMockMvc для тестирования контроллеров с контентом в формате JSON
Да, MockMvc позволяет отправлять и получать JSON-данные. Для отправки JSON можно использовать content() и contentType(), а для проверки ответа — jsonPath():
mockMvc
.perform(post(“/example”)
.contentType(MediaType.APPLICATION_JSON)
.content(“{"key":"value"}”)) .andExpect(jsonPath(“$.key”).value(“value”));
Можно ли тестировать REST API с использованием MockMvc
Да, MockMvc прекрасно подходит для тестирования REST API, позволяя имитировать все типы HTTP-запросов (GET, POST, PUT, DELETE) и проверять JSON-ответы.
Как протестировать исключения, выбрасываемые контроллерами
Вы можете использовать метод andExpect() для проверки того, что контроллер выбросил исключение, и что возвращаемый статус кода соответствует ожидаемому:
mockMvc
.perform(get(“/example”)) .andExpect(status().isNotFound()
.andExpect(result -> assertTrue(result
.getResolvedException() instanceof CustomException));
Как добавить глобальные фильтры или настройки для MockMvc
Вы можете инжектировать и кастомизировать MockMvc с помощью специального бина MockMvcBuilderCustomizer для добавления фильтров, интерсепторов и других настроек.
Можно ли тестировать асинхронные запросы
Да, MockMvc поддерживает тестирование асинхронных запросов. Для этого нужно использовать методы andReturn() и asyncDispatch()