Неполадки, связанные с длинным значением в теле json Rest Assured
У меня есть следующий ответ:
[
{
"id": 53,
"fileUri": "abc",
"filename": "abc.jpg",
"fileSizeBytes": 578466,
"createdDate": "2018-10-15",
"updatedDate": "2018-10-15"
},
{
"id": 54,
"fileUri": "xyz",
"filename": "xyz.pdf",
"fileSizeBytes": 88170994,
"createdDate": "2018-10-15",
"updatedDate": "2018-10-15"
}
]
и я пытаюсь соответствовать id
Значение объекта в JUnit выглядит так:
RestAssured.given() //
.expect() //
.statusCode(HttpStatus.SC_OK) //
.when() //
.get(String.format("%s/%s/file", URL_BASE, id)) //
.then() //
.log().all() //
.body("", hasSize(2)) //
.body("id", hasItems(file1.getId(), file2.getId()));
Но когда совпадение происходит, оно пытается сопоставить int
к long
, Вместо этого я получаю этот вывод:
java.lang.AssertionError: 1 expectation failed.
JSON path id doesn't match.
Expected: (a collection containing <53L> and a collection containing <54L>)
Actual: [53, 54]
Как сказать Rest Assured, что значение действительно длинное, даже если оно может быть достаточно коротким, чтобы поместиться в int? Я могу разыграть файл id
для int
и это работает, но это кажется небрежным.
2 ответа
Проблема заключается в том, что при преобразовании из json в java-тип, выбранный тип int, одним из решений является сравнение значений int. вместо
.body("id", hasItems(file1.getId(), file2.getId()));
использование
.body("id", hasItems(new Long(file1.getId()).intValue(), new Long(file2.getId()).intValue()));
Как упоминалось в этом ответе,Integer
тип предпочитается RestAssured во время десериализации. Однако, если вам действительно нужно гарантировать тип данных, вы можете использовать число больше, чемInteger.MAX_VALUE
, чтобы заставить десериализацию использоватьLong
.
Итак, в вашем примере:
[
{
"id": Integer.MAX_VALUE + 53,
"fileUri": "abc",
"filename": "abc.jpg",
"fileSizeBytes": 578466,
"createdDate": "2018-10-15",
"updatedDate": "2018-10-15"
},
{
"id": Integer.MAX_VALUE + 54,
"fileUri": "xyz",
"filename": "xyz.pdf",
"fileSizeBytes": 88170994,
"createdDate": "2018-10-15",
"updatedDate": "2018-10-15"
}
]
И утверждение:
RestAssured.given()
.expect()
.statusCode(HttpStatus.SC_OK)
.when()
.get(String.format("%s/%s/file", URL_BASE, id))
.then()
.body("id", hasItems(
Integer.MAX_VALUE + file1.getId(),
Integer.MAX_VALUE + file2.getId()));