首页 > 解决方案 > 为什么 Hamcrest 的 containsInAnyOrder 匹配器接受数组而不是列表?

问题描述

在使用 Rest Assured 断言 REST 响应时,我正在使用 Hamcrest 的containsInAnyOrder匹配器。这是我的断言的一个例子:

assertThat(
        body.jsonPath().getList("zones.name"),
        containsInAnyOrder(values.getName().toArray()));

第一个参数返回一个列表。第二个参数 ( values.getName()) 也返回一个列表。但是 Intellij IDEA 在 mactcher 上显示错误:Unchecked generics array creation for varargs parameter。当我运行这个断言时,我得到java.lang.AssertionError. 当我将第二个参数转换为数组时,例如values.getName().toArray(),我得到了一切按预期工作。

所以我不明白为什么将 List 与 List 进行比较是行不通的,但 List 与数组却可以?为什么我需要将第二个参数转换为数组?

标签: rest-assuredhamcrest

解决方案


containsInAnyOrder接受一个T....

当您传递 aList时,您不会将 中的元素与body.jsonPath().getList("zones.name")中的元素进行比较values.getName(),而是将其与包含列表本身的单元素数组进行比较。由于字符串不能等于列表,因此断言失败。


推荐阅读