Неполадки, связанные с длинным значением в теле 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()));
Другие вопросы по тегам