带有hamcrest的JSONPath hasSize()

时间:2017-08-01 18:51:55

标签: citrus-framework

当使用@assertThat(hasSize(x))@形式的hasSize匹配器和返回数组的jsonpath表达式时,不会考虑重复值。示例:

focusout

如果我执行payload()。validate(" $ .. value1"," @assertThat(hasSize(2))@")它将导致错误为hasSize将期望一个大小为1而不是2的集合。这是匹配器的期望行为吗?解决方法是使用表达式" $ .a [?(@。value1)]"。

1 个答案:

答案 0 :(得分:0)

摘要

这是Citrus的一个错误。正如我在评论中所提到的,我已经找到了错误,请参阅GitHub issue

我还修复了错误并打开了GitHub Pull Request。但是,主要的Citrus维护者可能需要几周时间才能对我的更改进行审核,因为他目前正在开展另一个项目。

我很肯定该修复程序将包含在下一个Citrus维护版本2.7.3中。

备注

如果某些值是重复条目,则只会出现此错误,因为code fragment使用Set,根据定义,它不能包含重复条目。

示例(从GitHub问题复制)

{
  "test_array": [
    {
      "key_with_identical_values": "identical_value",
      "key_with_unique_values": "unique_value"
    },
    {
      "key_with_identical_values": "identical_value",
      "key_with_unique_values": "different_unique_value"
    }
  ]
}

鉴于柑橘验证如下:

<receive endpoint="testServer">
  <message type="json">
    <validate>
      <json-path expression="$..key_with_unique_values" value="@assertThat(hasSize(2))@"/>
      <json-path expression="$..key_with_identical_values" value="@assertThat(hasSize(2))@"/>
    </validate>
  </message>
</receive>

即使两个表达式的JSONPath数组大小为2["unique_value", "different_unique_value"]["identical_value", "identical_value"]),表达式$..key_with_identical_values的验证也会失败,并显示以下消息:< / p>

Expected: a collection with size <2>
     but: collection size was <1>