Как на Java в RestAssured сравнивать строки в JSON, если ответ получаем на кириллице?
У меня есть код:
public void updateItemTest() {
UpdateItem item = new UpdateItem("3026", "Shorts", "test", "someone Shorts",
"GREEN", 20, 1000, "dress");
String expectedString = "Товар обновлен!";
String response = requests.updateItem(item)
.then()
.assertThat().statusCode(HttpStatus.SC_OK)
.body("result", equalTo(expectedString))
.extract()
.response()
.asString();
}
Но после получения ответа на этот запрос у меня происходит ошибка в сравнении:
java.lang.AssertionError: 1 expectation failed.
JSON path result doesn't match.
Expected: Товар обновлен!
Actual: Товар обновлен!
Подскажите пожалуйста как можно это исправить?
P.S. UpdateItem состоит из:
public Response updateItem(UpdateItem item) {
return given()
.spec(specifications.baseRequestSpec())
.body(gson.toJson(item))
.put("/update");
}
А baseRequestSpec из:
public io.restassured.specification.RequestSpecification baseRequestSpec() {
RequestSpecBuilder requestSpecBuilder = new RequestSpecBuilder();
requestSpecBuilder.setContentType(ContentType.JSON);
requestSpecBuilder.setBaseUri("http://shop.bugred.ru/api/items");
return requestSpecBuilder.build();
}
Ответы (2 шт):
RestAssured поддерживает сравнение строк на любом языке, включая кириллицу. Проблемы могут возникнуть, если сервер возвращает данные в неправильной кодировке. В этом случае вы можете указать кодировку вручную при обработке ответа.
Вот пример, как можно сравнить строки на кириллице в JSON с использованием RestAssured:
import static io.restassured.RestAssured.given;
import static org.hamcrest.Matchers.equalTo;
public class Test {
@org.junit.Test
public void test() {
given()
.when()
.get("http://example.com/api")
.then()
.body("key", equalTo("значение"));
}
}
В этом примере мы запрашиваем данные с сервера по адресу http://example.com/api, а затем проверяем, что значение ключа key в возвращенном JSON равно значение.
Если сервер возвращает данные в неправильной кодировке, вы можете указать кодировку вручную следующим образом:
import static io.restassured.RestAssured.given;
import static org.hamcrest.Matchers.equalTo;
public class Test {
@org.junit.Test
public void test() {
given()
.when()
.get("http://example.com/api")
.then()
.contentType("application/json; charset=UTF-8")
.body("key", equalTo("значение"));
}
}
В этом примере мы указали, что ожидаем данные в формате JSON с кодировкой UTF-8.
У вас файл тестового класса в кодировке, отличной от UTF-8, поэтому вы и видите кракозябры в сообщении. Исправьте кодировку файла в вашей IDE