我有以下json结构:
{
content: [
{
status: 100,
},
{
status: 100,
},
{
status: 200,
},
{
status: 300
}
]
}
我在Spring中使用以下代码来测试json中的任何状态值是否包含使用状态数组指定的接受值:
jsonPath("$.content[*].status", Matchers.containsInAnyOrder(100, 200, 300));
它失败,因为检查的可迭代的不与指定项的数量相同。如果我像这样Matchers.containsInAnyOrder(100, 100, 200, 300)
指定数组,那么它就会成功。
我检查了匹配器的实现,看起来每次成功匹配时,匹配的值都会从指定的项目中删除。
是否有任何Hamcrest匹配器不会删除匹配的项目?
答案 0 :(得分:2)
为Iterables创建一个与订单无关的匹配器,当对检查的Iterable进行单次传递时会生成一系列项目,每个项目在逻辑上等于指定项目中任何位置的一个项目。
但是你真正要做的是检查每个项目是否在其中 一组有效的值,可以写成:
Matchers.everyItem(Matchers.isOneOf(100,200,300))