Этот 2013 post on SO спросил, как использовать сочетания Hamcrest для проверки списков/коллекций в Mockito. Принятое решение состояло в том, чтобы бросить Матчи в (Сборник).Сокеты Mockito/JMockit & Hamcrest: как проверить списки/коллекции?
Я пытаюсь сделать что-то подобное, но столкнулся с ошибкой класса. Я не уверен, что я злоупотребляю состязаниями Hamcrest, или если это использование просто не поддерживается Mockito. В моем случае, я пытаюсь использовать список Matchers как мой аргумент:
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>
я делаю что-то не поддерживается?
Спасибо за выноску! +1, и вы также можете сделать это inline путем параметризации 'asList' (т. Е.' Arrays. Super String >> asList (...) '). –
@JeffBowman отлично. Я добавлю это к ответу, надеюсь, что вы не возражаете – Ruben
Прошу! У меня не было возможности проверить это, но вы сформулировали очень хороший ответ с очень конкретным объяснением, и определенно заслуживают должного внимания. –