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

时间:2018-09-04 11:25:28

标签: rest-assured hamcrest

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

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

第一个参数返回一个列表。第二个参数(values.getName())也返回一个列表。但是Intellij IDEA在mactcher上显示了一个错误:未经检查的varargs参数的泛型数组创建。运行此断言时,我得到java.lang.AssertionError。当我将第二个参数转换为数组,例如values.getName().toArray()时,一切都会按预期进行。

所以我不明白为什么将列表与列表进行比较不起作用,而将列表与数组进行比较为什么不起作用?为什么我需要将第二个参数转换为数组?

1 个答案:

答案 0 :(得分:0)

containsInAnyOrder接受T...

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