Класс MockMvc Flashcards

1
Q

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

A

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

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

Что такое MockMvc

A

MockMvc — это класс в Spring, который позволяет тестировать контроллеры Spring MVC, отправляя HTTP-запросы к ним без запуска реального веб-сервера.

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

Как создать экземпляр MockMvc

A

MockMvc можно создать с помощью аннотации @AutoConfigureMockMvc в интеграционных тестах или через MockMvcBuilders для более контролируемой настройки:

MockMvc mockMvc = MockMvcBuilders
.webAppContextSetup(webApplicationContext)
.build();

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

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

A

Для выполнения HTTP-запроса используется метод perform(), который отправляет запрос к определенному маршруту (например, GET, POST и т.д.):

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

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

Какие типы запросов поддерживает MockMvc

A

MockMvc поддерживает все основные HTTP методы: GET, POST, PUT, DELETE, PATCH, и другие, например:

mockMvc
.perform(post(“/example”));

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

Как проверить HTTP-ответ с помощью MockMvc

A

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

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
7
Q

Как передавать параметры в запросах MockMvc

A

Параметры можно передавать через методы param() для стандартных параметров или queryParam() для параметров в строке запроса:

mockMvc
.perform(get(“/example”)
.param(“key”, “value”));

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

Как передать тело запроса в формате JSON с помощью MockMvc

A

Для отправки данных в формате JSON используется метод content() в комбинации с contentType():

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

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

Как протестировать JSON-ответ от контроллера

A

Вы можете использовать метод jsonPath() для проверки содержимого JSON-ответа:

mockMvc
.perform(get(“/example”))
.andExpect(jsonPath(“$.key”).value(“value”));

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

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

A

Для имитации аутентифицированного пользователя можно использовать аннотацию @WithMockUser или метод SecurityMockMvcRequestPostProcessors.user():

mockMvc
.perform(get(“/example”)
.with(user(“username”)));

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

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

A

Чтобы тестировать контроллеры изолированно от сервисов, вы можете использовать аннотацию @MockBean для мокирования зависимостей:

@MockBean
private ExampleService exServ;

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

Можно ли тестировать исключения, выбрасываемые контроллером, с MockMvc

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
13
Q

Как тестировать асинхронные контроллеры с MockMvc

A

MockMvc поддерживает тестирование асинхронных методов через методы andReturn() и asyncDispatch():

MvcResult mvcResult = mockMvc
.perform(get(“/async-endpoint”))
.andReturn();
mockMvc
.perform(asyncDispatch(mvcResult))
.andExpect(status().isOk());

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

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

A

Для тестирования загрузки файлов используется метод fileUpload():

mockMvc
.perform(multipart(“/upload”)
.file(new MockMultipartFile(“file”, “test.txt”, “text/plain”, “test data”
.getBytes())))
.andExpect(status().isOk());

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

Как проверить заголовки HTTP-ответа

A

Для проверки заголовков ответа используйте метод header() в комбинации с andExpect():

mockMvc
.perform(get(“/example”))
.andExpect(header().string(“Content-Type”, “application/json”));

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

Можно ли тестировать контроллеры в многопоточном окружении

A

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

18
Q

Как интегрировать MockMvc с Testcontainers для тестирования баз данных

A

MockMvc можно использовать вместе с библиотекой Testcontainers, которая предоставляет возможность поднять контейнер с базой данных для изолированного тестирования.

19
Q

Как ускорить тесты с MockMvc

A

Для ускорения тестов рекомендуется минимизировать загружаемый контекст Spring, мокировать ненужные зависимости и использовать кэширование контекста между тестами.

20
Q

Можно ли протестировать контроллеры в контексте микросервисов?

A

MockMvc можно использовать для изолированных тестов контроллеров в микросервисной архитектуре, а взаимодействие между микросервисами можно мокировать с помощью MockRestServiceServer или аналогичных инструментов.