@AutoConfigureMockMvc Flashcards

1
Q

Что такое @AutoConfigureMockMvc

A

Это аннотация, которая настраивает и инициализирует компонент MockMvc для тестирования Spring MVC контроллеров без запуска веб-сервера.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Для чего используется @AutoConfigureMockMvc

A

Аннотация используется для автоматической настройки MockMvc, что позволяет проводить тестирование HTTP запросов и ответов к контроллерам Spring в изолированной среде, не поднимая настоящий сервер.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Как работает MockMvc

A

MockMvc имитирует запросы к вашему приложению, позволяя тестировать его контроллеры, фильтры, и другие компоненты MVC, без необходимости запуска сервера или браузера.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Обязательно ли использовать @SpringBootTest вместе с @AutoConfigureMockMvc

A

Да, @AutoConfigureMockMvc обычно используется вместе с @SpringBootTest, чтобы загружать весь контекст приложения и тестировать контроллеры на уровне MVC.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Загружает ли @AutoConfigureMockMvc веб-сервер?

A

Нет, @AutoConfigureMockMvc создает среду для тестирования контроллеров без запуска реального веб-сервера, используя подделанный (mock) HTTP слой.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Как использовать MockMvc для выполнения HTTP-запросов

A

Вы можете инжектировать MockMvc через @Autowired и использовать методы вроде perform(), чтобы имитировать HTTP-запросы (GET, POST, PUT и т.д.) и проверять ответы контроллеров.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Как настроить запросы с параметрами в MockMvc

A

Для создания запросов с параметрами можно использовать методы param() и queryParam() в MockMvc, например:
mockMvc
.perform(get(“/example”)
.param(“key”, “value”))

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Как проверить HTTP-ответы с использованием MockMvc

A

Вы можете использовать методы andExpect() для проверки различных аспектов HTTP-ответа: статус кода, тело ответа, заголовки, например:
mockMvc
.perform(get(“/example”))
.andExpect(status().isOk())
.andExpect(content().string(“Expected response”));

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Как тестировать контроллеры, защищенные авторизацией

A

Для тестирования контроллеров с защитой можно использовать MockMvc вместе с @WithMockUser для имитации аутентифицированного пользователя или использовать метод
mockMvc
.perform(with(SecurityMockMvcRequestPostProcessors
.user(“username”)))

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Как мокировать слои сервиса в тестах с @AutoConfigureMockMvc

A

Вместе с @AutoConfigureMockMvc можно использовать аннотацию @MockBean для подмены (mocking) зависимостей, таких как сервисы или репозитории, чтобы тестировать контроллеры в изоляции.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Можно ли использовать @AutoConfigureMockMvc для тестирования контроллеров с контентом в формате JSON

A

Да, MockMvc позволяет отправлять и получать JSON-данные. Для отправки JSON можно использовать content() и contentType(), а для проверки ответа — jsonPath():

mockMvc
.perform(post(“/example”)
.contentType(MediaType.APPLICATION_JSON)
.content(“{"key":"value"}”)) .andExpect(jsonPath(“$.key”).value(“value”));

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Можно ли тестировать REST API с использованием MockMvc

A

Да, MockMvc прекрасно подходит для тестирования REST API, позволяя имитировать все типы HTTP-запросов (GET, POST, PUT, DELETE) и проверять JSON-ответы.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Как протестировать исключения, выбрасываемые контроллерами

A

Вы можете использовать метод andExpect() для проверки того, что контроллер выбросил исключение, и что возвращаемый статус кода соответствует ожидаемому:

mockMvc
.perform(get(“/example”)) .andExpect(status().isNotFound()
.andExpect(result -> assertTrue(result
.getResolvedException() instanceof CustomException));

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Как добавить глобальные фильтры или настройки для MockMvc

A

Вы можете инжектировать и кастомизировать MockMvc с помощью специального бина MockMvcBuilderCustomizer для добавления фильтров, интерсепторов и других настроек.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Можно ли тестировать асинхронные запросы

A

Да, MockMvc поддерживает тестирование асинхронных запросов. Для этого нужно использовать методы andReturn() и asyncDispatch()

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Как включить логгирование запросов и ответов для отладки тестов

A

Вы можете использовать MockMvcResultHandlers.print() для вывода запросов и ответов в консоль

mockMvc
.perform(get(“/example”))
.andDo(print());

17
Q

Как работать с Content Negotiation в MockMvc

A

Content Negotiation можно настроить через метод accept() для указания типа ответа (например, JSON или XML), и с помощью метода contentType() для указания типа контента запроса:

18
Q

Как использовать кастомные конфигурации для MockMvc в тестах

A

Вы можете создать отдельную конфигурацию для MockMvc, используя класс с аннотацией @TestConfiguration, и добавлять туда нужные настройки

19
Q

Можно ли интегрировать @AutoConfigureMockMvc с базами данных для более полных тестов

A

Да, вы можете использовать @AutoConfigureTestDatabase или другие подходы для интеграции с базой данных, чтобы тестировать контроллеры в более полном окружении с реальными данными.

20
Q

Как можно ускорить выполнение тестов с MockMvc

A

Чтобы ускорить тестирование с MockMvc, используйте стратегии кэширования контекста Spring Boot, чтобы не перезагружать контекст при каждом тесте, а также мокируйте зависимости, которые не участвуют в непосредственной логике контроллера.