我正在尝试编写一个JUnit测试,它检查接收到的JSON的值。我使用jsonPath在JSON中访问这些值。我想检查值是否为true
。对于简单的jsonPaths,它适用于我,但是当我编写更复杂的jsonPath查询时,它没有,我得到这个断言错误:
Expected: is <true>
but: was <[true]>
我的JSON:
{...
,"trips":
[
{...
,"employee":{"name":"Ordinary Joe","login":"joe","contractor":true}
,...
},
...
],
...
}
有问题的断言
.andExpect(jsonPath("$.trips[?(@.employee.login=='joe')].employee.contractor", is(true)));
我尝试了什么
我尝试将该值与new Boolean(true)
,boolean[]
数组匹配,其值为true
,并且is()
匹配器也检查String.valueOf(true)
但是它也不匹配。
我的问题
我应该如何正确匹配此true
值?这些[]
括号在测试输出中到底意味着什么?
答案 0 :(得分:0)
在进一步调查中,我实际上发现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))))