【问题标题】:Matching Boolean true value using jsonPath使用 jsonPath 匹配布尔真值
【发布时间】:2017-06-01 11:52:44
【问题描述】:

我正在尝试编写一个 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 值?这些[] 大括号在测试输出中究竟是什么意思?

【问题讨论】:

    标签: java json junit jsonpath hamcrest


    【解决方案1】:

    在进一步的调查中,我实际上发现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))))
    

    【讨论】:

    • 它可能会返回 JsonArray,因为它不能确保只有一个值与表达式匹配。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多