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("")));