当使用@assertThat(hasSize(x))@形式的hasSize匹配器和返回数组的jsonpath表达式时,不会考虑重复值。示例:
focusout
如果我执行payload()。validate(" $ .. value1"," @assertThat(hasSize(2))@")它将导致错误为hasSize将期望一个大小为1而不是2的集合。这是匹配器的期望行为吗?解决方法是使用表达式" $ .a [?(@。value1)]"。
答案 0 :(得分:0)
这是Citrus的一个错误。正如我在评论中所提到的,我已经找到了错误,请参阅GitHub issue。
我还修复了错误并打开了GitHub Pull Request。但是,主要的Citrus维护者可能需要几周时间才能对我的更改进行审核,因为他目前正在开展另一个项目。
我很肯定该修复程序将包含在下一个Citrus维护版本2.7.3
中。
如果某些值是重复条目,则只会出现此错误,因为code fragment使用Set
,根据定义,它不能包含重复条目。
{
"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>