使用jsonPath匹配布尔值true

时间:2017-06-01 11:52:45

标签: java json junit jsonpath hamcrest

我正在尝试编写一个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值?这些[]括号在测试输出中到底意味着什么?

1 个答案:

答案 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))))