Mockito: проверка с помощью общих параметров

С Mockito я могу сделать следующее:

verify(someService).process(any(Person.class));

Но как это записать, если process вместо этого принимает Collection<Person>? Не могу понять, как правильно писать. Просто получить синтаксические ошибки...

Ответ 1

Try:

verify(someService).process(Matchers.<Collection<Person>>any());

Собственно, IntelliJ автоматически предложил это исправление, когда я набрал any()... К сожалению, вы не можете использовать статический импорт в этом случае.

Ответ 2

Попробуйте:

verify(someService).process(anyCollectionOf(Person.class));

Поскольку версия 1.8 Mockito представляет

public static <T> Collection<T> anyCollectionOf(Class<T> clazz);

Ответ 3

если вы используете собственный метод, вы даже можете использовать статический импорт:

private Collection<Person> anyPersonCollection() {
    return any();
}

Затем вы можете использовать

verify(someService).process(anyPersonCollection());

Ответ 4

Вы не можете выразить это из-за стирания типа. Даже если вы могли бы выразить это в коде, у Mockito не было возможности проверить его во время выполнения. Вы можете создать интерфейс, например

interface PersonCollection extends Collection<Person> { /* nothing */ }

и используйте это во всем своем коде.

Изменить: я ошибся, у Mockito есть anyCollectionOf (..), который вам нужен.