rest-assured - 为什么 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 与数组却可以?为什么我需要将第二个参数转换为数组?
解决方案
containsInAnyOrder
接受一个T...
.
当您传递 aList
时,您不会将 中的元素与body.jsonPath().getList("zones.name")
中的元素进行比较values.getName()
,而是将其与包含列表本身的单元素数组进行比较。由于字符串不能等于列表,因此断言失败。
推荐阅读
- javascript - Javascript 搜索是否不如使用 Sphinx 或 Elasticsearch 等搜索客户端安全?
- ruby-on-rails - bundle install on ruby on rails 抛出 mingw32 错误
- javascript - Material-UI 中的 DefaultTheme 导致“扩充中的模块名称无效”错误
- oracle - Windows Server 2008R 中的 Pro*C Oracle 11g 数据库连接
- google-chrome - PWA:在隐身模式下是否会触发 beforeinstallprompt 事件?
- javascript - 将名称随机推入两个数组之一
- javascript - 如何使用 react.js 查看/嵌入 Excel (.xlsx) 数据或文件并使用过滤器显示到表格中。(使用 Cloud9)
- powershell - 反序列化来自 Invoke-Restmethod 的响应后禁用转换为 UTC 时区
- javascript - Javascript 创建自定义属性获取器(如在 python 中)
- flutter - 如何在 Flutter 中构建引导式应用程序