使用jsonPath测试重复值列表中包含的值(Hamcrest)

时间:2017-08-04 10:42:24

标签: java spring jsonpath hamcrest mockmvc

我有以下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匹配器不会删除匹配的项目?

1 个答案:

答案 0 :(得分:2)

Matchers.containsInAnyOrder

  

为Iterables创建一个与订单无关的匹配器,当对检查的Iterable进行单次传递时会生成一系列项目,每个项目在逻辑上等于指定项目中任何位置的一个项目。

但是你真正要做的是检查每个项目是否在其中 一组有效的值,可以写成:

Matchers.everyItem(Matchers.isOneOf(100,200,300))