为什么Hamcrest的containsInAnyOrder匹配器接受数组而不是列表?

问题描述 投票:1回答:1

我在使用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呢?为什么我需要将第二个参数转换为数组?

rest-assured hamcrest
1个回答
0
投票

containsInAnyOrder接受T...

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

© www.soinside.com 2019 - 2024. All rights reserved.