输入:
目标是使以下声明可编辑:
Collection<MyElement> elements = ...
Collection<TypeSafeMatchert> matchers = ...
assertThat(elements, Matchers.contains(matchers); //<error here
这里有什么用?它要我Matcher<? super java.util.List<MyElement>>
并告诉我,我通过了Matcher<java.lang.Iterable<? super java.util.List<MyElement>>>
。那么如何在这里传递Matcher Collection?
有关于使用hamcrest比较集合的question,但没有传递Matchers集合的示例,而不是元素。
答案 0 :(得分:0)
对匹配器使用List而不是collection,或将其转换为array。
Hamcrest遵循contains
方法:
public static <E> org.hamcrest.Matcher<java.lang.Iterable<? extends E>> contains(org.hamcrest.Matcher<? super E>... itemMatchers)
public static <E> org.hamcrest.Matcher<java.lang.Iterable<? extends E>> contains(E... items)
public static <E> org.hamcrest.Matcher<java.lang.Iterable<? extends E>> contains(org.hamcrest.Matcher<? super E> itemMatcher)
public static <E> org.hamcrest.Matcher<java.lang.Iterable<? extends E>> contains(java.util.List<org.hamcrest.Matcher<? super E>> itemMatchers)
正如您所看到的,只有在List
或varags的情况下它才会处理Matchers(但如果只传递一个元素,则需要将其转换为数组)。
答案 1 :(得分:0)
您需要定义:
,而不是定义Collection
的{{1}}
TypeSafeMatchers
这样, List<Matcher<? super MyElement>> matchers = ...;
就会知道你想要什么。