Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
7 профессий по цене одной
07:05:47:06
дн. ч. мин. сек.
14 Мар 2023
2 мин
464

Проверка строки в теле ответа с помощью mockMvc

Одной из распространенных задач при создании интеграционных тестов на языке Java с использованием библиотеки Spring MVC Test (mockMvc) является проверка того,

Одной из распространенных задач при создании интеграционных тестов на языке Java с использованием библиотеки Spring MVC Test (mockMvc) является проверка того, что строка в теле ответа соответствует ожидаемой.

Рассмотрим простой пример:

@Test
public void shouldReturnErrorMessageWhenCreatingUserWithUsedUserName() throws Exception {
    mockMvc.perform(post("/api/users").header("Authorization", base64ForTestUser).contentType(MediaType.APPLICATION_JSON)
        .content("{\"userName\":\"testUserDetails\",\"firstName\":\"xxx\",\"lastName\":\"xxx\",\"password\":\"xxx\"}"))
        .andDo(print())
        .andExpect(status().isBadRequest())
        .andExpect(?);
}

В данном случае, мы хотим проверить, что полученная в теле ответа строка соответствует ожидаемому значению. Как это сделать?

В mockMvc есть метод content(), который позволяет проверить тело ответа.
Но что делать, если этот метод не работает или не дает ожидаемого результата?

Один из способов решения этой проблемы — использование jsonPath. Этот метод позволяет проверять содержимое JSON ответа с использованием выражений JSONPath. Например:

.andExpect(jsonPath("$.message").value("Username already taken"))

Здесь $.message — это выражение JSONPath, которое указывает на поле message в JSON-объекте, а "Username already taken" — это ожидаемое значение этого поля.

Если ответ не в формате JSON, можно использовать метод content() с матчером String из библиотеки Hamcrest, который предоставляет множество методов для проверки строк:

.andExpect(content().string("Username already taken"))

Этот код проверяет, что тело ответа точно соответствует строке "Username already taken".

Важно помнить, что метод content() проверяет точное соответствие, а не наличие подстроки в ответе. Если вам нужно проверить наличие подстроки в ответе, вы можете использовать метод containsString() из Hamcrest:

.andExpect(content().string(containsString("Username already taken")))

Таким образом, с помощью mockMvc и Hamcrest можно эффективно проверять строки в теле ответа при написании интеграционных тестов в Spring MVC.

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей

Добавить комментарий