【发布时间】:2015-10-26 17:05:08
【问题描述】:
2013 post on SO 询问如何使用 Hamcrest 匹配器来验证 Mockito 中的列表/集合调用。公认的解决方案是将 Matcher 转换为 (Collection)。
我正在尝试做类似的事情,但遇到了类转换错误。我不确定我是否在滥用 Hamcrest 匹配器,或者 Mockito 是否根本不支持这种用法。就我而言,我正在尝试使用匹配器列表作为我的论点:
static class Collaborator
{
void doSomething(Iterable<String> values) {}
}
@Test
public void usingMockito()
{
Collaborator mock = Mockito.mock(Collaborator.class);
mock.doSomething(Arrays.asList("a", "b"));
// legal cast
Mockito.verify(mock).doSomething((Collection<String>)argThat(Matchers.contains("a", "b")));
// legal cast
Mockito.verify(mock).doSomething((Collection<String>)argThat(Matchers.contains(Matchers.equalTo("a"), Matchers.equalTo("b"))));
// illegal cast!!! Cannot cast from Iterable<capture#3-of ? extends List<Matcher<String>>> to Collection<String>
Mockito.verify(mock).doSomething((Collection<String>)argThat(Matchers.contains(Arrays.asList(Matchers.equalTo("a"), Matchers.equalTo("b")))));
}
但我得到了转换错误:
Cannot cast from Iterable<capture#3-of ? extends List<Matcher<String>>> to Collection<String>
我在做一些不受支持的事情吗?
【问题讨论】:
标签: java generics mockito jmockit hamcrest