Одной из распространенных задач при создании интеграционных тестов на языке 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.
Перейти в телеграм, чтобы получить результаты теста



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