RestAssured との完全な Json 一致 質問する

RestAssured との完全な Json 一致 質問する

REST-Assured を使用して API をテストしています。私の API は明らかに JSON で応答し、ドキュメントによると、応答は次のようになります。

{
    "id": "390",
    "data": {
        "leagueId": 35,
        "homeTeam": "Norway",
        "visitingTeam": "England",
    },
    "odds": [{
        "price": "1.30",
        "name": "1"
    },
    {
        "price": "5.25",
        "name": "X"
    }]
}

次のようにテストできます:

@Test
public void givenUrl_whenSuccessOnGetsResponseAndJsonHasRequiredKV_thenCorrect() {
   get("/events?id=390")
      .then()
         .statusCode(200)
         .assertThat()
            .body("data.leagueId", equalTo(35)); 
}

これは確かに読み取り可能ですが、JSON の完全な比較が必要です (つまり、これは JSON 応答です。これは既成の JSON です。リソース ファイルが最適です。これらの JSON は同じですか?)。REST-Assured はそのようなものを提供していますか、それとも手動で作成する必要がありますか。

ベストアンサー1

RestAssured の JsonPath を使用して json ファイルをマップに解析し、それを Hamcrest Matchers と比較します。この方法では順序などは問題になりません。

import static org.hamcrest.Matchers.equalTo;
import io.restassured.path.json.JsonPath;

...

JsonPath expectedJson = new JsonPath(new File("/path/to/expected.json"));

given()
    ...
    .then()
    .body("", equalTo(expectedJson.getMap("")));

おすすめ記事