首页 > 解决方案 > Hamcrest 匹配器返回项目而不是可迭代的项目

问题描述

我正在尝试将测试验证为:

assertThat("array_field", row.getArray("count_to_six_agg") ,
                   containsInAnyOrder(Arrays.asList(1L,2L,3L,4L,5L,6L)));

供参考:http://hamcrest.org/JavaHamcrest/javadoc/1.3/org/hamcrest/MatcherAssert.html#assertThat(java.lang.String,%20T,%20org.hamcrest.Matcher)

这里 containsInAnyOrder(Arrays.asList(1L,2L,3L,4L,5L,6L)) 返回

可按任何顺序迭代项目 [<[1, 2, 3, 4, 5, 6]>]

我希望它返回

仅项目 [<[1, 2, 3, 4, 5, 6]>]。

怎么可能呢?

标签: javaunit-testingjunithamcrest

解决方案


您选择了containsInAnyOrder的以下重载

public static <T> Matcher<java.lang.Iterable<? extends T>> containsInAnyOrder(T... items)

并且只传递了一个元素 - 一个列表。

您需要将每个元素作为单独的参数传递:

containsInAnyOrder(1L,2L,3L,4L,5L,6L)

推荐阅读