我在使用Rest Assured声明REST响应时使用Hamcrest的containsInAnyOrder
匹配器。这是我断言的一个例子:
assertThat(
body.jsonPath().getList("zones.name"),
containsInAnyOrder(values.getName().toArray()));
第一个参数返回一个List。第二个参数(values.getName()
)也返回一个List。但是Intellij IDEA在mactcher上显示错误:为varargs参数创建了未经检查的泛型数组。当我运行这个断言时,我得到了java.lang.AssertionError
。当我将第二个参数转换为数组时,如values.getName().toArray()
,我可以按预期工作。
所以我无法理解为什么将List与List进行比较不起作用,但是带有数组的List呢?为什么我需要将第二个参数转换为数组?
containsInAnyOrder
接受T...
。
当您传递List
时,您不是要将body.jsonPath().getList("zones.name")
中的元素与values.getName()
中的元素进行比较,而是将其与包含列表本身的单元素数组进行比较。由于字符串不能等于列表,因此断言失败。