如何缩短用于标识数组中单个元素的 json 路径?
How to shorten the json path used to identify a single element within an array?
请假定以下响应
{
"animals": [
{
"name": "hobba",
"embeddedData": {
"age": "3",
"color": "white"
}
},
{
"name": "obba",
"embeddedData": {
"age": "1",
"color": "yellow"
}
}
]
}
我需要断言数组中存在具有特定值的元素。我是这样做的:
JsonPath jsonPath = response.jsonPath();
Assert.assertNotNull("Error message", jsonPath .param("name", "hobba").param("age", "3").param("color", "white").get("animals.find { a -> a.name == name && a.embeddedData.age == age && a.embeddedData.color == color"));
如您所见,我必须在每个需要断言其值的元素之前键入 a.embeddedData
。这只是一个示例,因为将有许多元素来声明它们的值。
有没有更易读和循环友好的方法来做到这一点?
另外,如果 embeddedData
或 animals
中有一个数组,我如何仍然对 animals
中的每个元素执行断言?
您可以使用带有匹配器的内置断言功能检查正文:
.then()
.assertThat()
.root("animals.embeddedData")
.body("age", Every.everyItem(Matchers.notNullValue()))
.body("color", Every.everyItem(Matchers.notNullValue()))
请假定以下响应
{
"animals": [
{
"name": "hobba",
"embeddedData": {
"age": "3",
"color": "white"
}
},
{
"name": "obba",
"embeddedData": {
"age": "1",
"color": "yellow"
}
}
]
}
我需要断言数组中存在具有特定值的元素。我是这样做的:
JsonPath jsonPath = response.jsonPath();
Assert.assertNotNull("Error message", jsonPath .param("name", "hobba").param("age", "3").param("color", "white").get("animals.find { a -> a.name == name && a.embeddedData.age == age && a.embeddedData.color == color"));
如您所见,我必须在每个需要断言其值的元素之前键入 a.embeddedData
。这只是一个示例,因为将有许多元素来声明它们的值。
有没有更易读和循环友好的方法来做到这一点?
另外,如果 embeddedData
或 animals
中有一个数组,我如何仍然对 animals
中的每个元素执行断言?
您可以使用带有匹配器的内置断言功能检查正文:
.then()
.assertThat()
.root("animals.embeddedData")
.body("age", Every.everyItem(Matchers.notNullValue()))
.body("color", Every.everyItem(Matchers.notNullValue()))