web-dev-qa-db-ja.com

配列にオブジェクトが含まれていることを確認するにはどうすればよいですか?

たとえば、応答としてJSONがあります。

[{"id":1,"name":"text"},{"id":2,"name":"text"}]}

応答にカスタムオブジェクトが含まれているかどうかを確認したいと思います。例えば:

Person(id=1, name=text)

私は解決策を見つけました:

Person[] persons = response.as(Person[].class);
assertThat(person, IsArrayContaining.hasItemInArray(expectedPerson));

私はこのようなものが欲しいです:

response.then().assertThat().body(IsArrayContaining.hasItemInArray(object));

これに対する解決策はありますか?
ご協力いただきありがとうございます。

8
yarafed

body()メソッドは、パスとHamcrestマッチャーを受け入れます( javadocs を参照)。

だから、あなたはこれを行うことができます:

response.then().assertThat().body("$", customMatcher);

例えば:

// 'expected' is the serialised form of your Person
// this is a crude way of creating that serialised form
// you'll probably use whatever JSON de/serialisaiotn library is in use in your project 
Map<String, Object> expected = new HashMap<String, Object>();
expected.put("id", 1);
expected.put("name", "text");

response.then().assertThat().body("$", Matchers.hasItem(expected));
4
glytching

この場合、jsonスキーマ検証を使用することもできます。これを使用することで、JSON要素に個別のルールを設定する必要がなくなります。

見てください 安心したスキーマ検証

get("/products").then().assertThat().body(matchesJsonSchemaInClasspath("products-schema.json"));
0
rohit.jaryal