junit 使用jsonPath匹配布尔真值

ej83mcc0  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(114)

我正在尝试编写一个JUnit测试,它检查接收到的JSON的值。我使用jsonPath在JSON中访问这些值。我想检查一个值是否为true。对于简单的jsonPaths,它对我有效,但当我编写更复杂的jsonPath查询时,它不起作用,我得到了这个Assert错误:

Expected: is <true>
but: was <[true]>

字符串

我的JSON:

{...
,"trips":
  [
    {...
    ,"employee":{"name":"Ordinary Joe","login":"joe","contractor":true}
    ,...
    },
    ...
  ],
 ...
}

有问题的Assert

.andExpect(jsonPath("$.trips[?(@.employee.login=='joe')].employee.contractor", is(true)));

我所尝试的

我试图匹配的值也与new Boolean(true)boolean[]数组与一个true值,并在检查is()匹配器也与String.valueOf(true),但它也不匹配。

我的问题

我应该如何正确匹配这个true值?这些[]大括号在测试输出中到底意味着什么?

7qhs6swi

7qhs6swi1#

在进一步的调查中,我实际上发现jsonPath以某种方式将获得的true值转换为带有一个项目的JsonArray,因此无法使用is(true)匹配器进行匹配。我不确定JsonPath为什么会这样做。
我发现下面的工作变通使用hasItem匹配器代替:

.andExpect(jsonPath("$.trips[?(@.employee.login=='joe')].employee.contractor", hasItem(true)))
.andExpect(jsonPath("$.trips[?(@.employee.login=='joe')].employee.contractor", not(hasItem(false))))

字符串

ctrmrzij

ctrmrzij2#

您可以使用==0表示true或==1表示false

{
  MyArray: [
    {
      IsTrueOrFalse: true,
      Item: "1st Item"
    },
    {
      IsTrueOrFalse: false,
      Item: "2nd Item"
    }
  ]
}

字符串
$.. MyArray[?(@.CheckIfTrueOrFalse==0)].Item返回[“1st Item”]

相关问题