放心地在对象数组中查找特定的键值对
Find specific key-value pair in an array of object with rest assured
我有一个 json 回复是这样的:
"someArray": [
{
"someProperty":"someValue",
// other properties that are not relevant for me
},
{
"someProperty":"someOtherValue",
// other properties that are not relevant for me
}
]
我想检查 someArray 数组是否有一个名为 "someProperty" 且值为 "someValue" 的 属性 对象,但如果它有另一个对象,则测试不会失败具有相同的 属性 但不同的值。
可能吗?在此之前我一直在使用静态索引,因为我在那个数组中只有一个元素。
假设您使用的是 Java 8 或更高版本,您应该使用 Arrays.stream(someArray)
然后使用 filter
方法来 select 您想要的元素。
我没有使用过 REST-assured,但根据他们的文档,您应该可以使用下面这样的东西
@Test public void
lotto_resource_returns_200_with_expected_id_and_winners() {
when().
get("/lotto/{id}", 5).
then().
statusCode(200).
body("someArray", hasItems(hasEntry("someProperty", "someValue")));
}
如果您可以在使用 hasEntry
之前放置某种反序列化逻辑将对象转换为映射,则此方法有效
另一个解决方案是使用 findAll
body("someArray.findAll {o -> o.someProperty == 'someValue'}.size()", greaterThan(0))
这是一个使用 JsonPath 的解决方案:
List<String> values = RestAssured.when().get("/api")
.then().extract().jsonPath()
.getList("someArray.someProperty");
Assert.assertTrue(values.contains("someValue"));
将适用于以下响应 JSON:
{
"someArray":[
{
"someProperty":"someValue"
},
{
"someProperty":"someOtherValue"
}
]
}
我有一个 json 回复是这样的:
"someArray": [
{
"someProperty":"someValue",
// other properties that are not relevant for me
},
{
"someProperty":"someOtherValue",
// other properties that are not relevant for me
}
]
我想检查 someArray 数组是否有一个名为 "someProperty" 且值为 "someValue" 的 属性 对象,但如果它有另一个对象,则测试不会失败具有相同的 属性 但不同的值。
可能吗?在此之前我一直在使用静态索引,因为我在那个数组中只有一个元素。
假设您使用的是 Java 8 或更高版本,您应该使用 Arrays.stream(someArray)
然后使用 filter
方法来 select 您想要的元素。
我没有使用过 REST-assured,但根据他们的文档,您应该可以使用下面这样的东西
@Test public void
lotto_resource_returns_200_with_expected_id_and_winners() {
when().
get("/lotto/{id}", 5).
then().
statusCode(200).
body("someArray", hasItems(hasEntry("someProperty", "someValue")));
}
如果您可以在使用 hasEntry
另一个解决方案是使用 findAll
body("someArray.findAll {o -> o.someProperty == 'someValue'}.size()", greaterThan(0))
这是一个使用 JsonPath 的解决方案:
List<String> values = RestAssured.when().get("/api")
.then().extract().jsonPath()
.getList("someArray.someProperty");
Assert.assertTrue(values.contains("someValue"));
将适用于以下响应 JSON:
{
"someArray":[
{
"someProperty":"someValue"
},
{
"someProperty":"someOtherValue"
}
]
}