Mockito: список Сопоставителей с дженериками



Mockito предлагает:





when(mock.process(Matchers.any(List.class)));




Как избежать предупреждения, если process принимает List<Bar> вместо?

595   3  

3 ответов:

для Java 8 и выше, это просто:

when(mock.process(Matchers.anyList()));

для Java 7 и ниже компилятор нуждается в небольшой помощи. Используйте anyListOf(Class<T> clazz):

when(mock.process(Matchers.anyListOf(Bar.class)));

кроме anyListOf выше, вы всегда можете указать дженерики явно с помощью этого синтаксиса:

when(mock.process(Matchers.<List<Bar>>any(List.class)));

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

when(mock.process(Matchers.any()));

помните, что ни any(), ни anyList() будут применяться любые проверки, включая проверки типа или null. В Mockito 2.x,any(Foo.class) было изменено на " любой instanceof Foo", но any() по-прежнему означает "любое значение, в том числе null".

Примечание: выше переключился на ArgumentMatchers в новых версиях Mockito, чтобы избежать конфликта имен с org.hamcrest.Matchers. Старые версии Mockito должны будут продолжать использовать org.mockito.Matchers как выше.

перед Java 8 (версии 7 или 6) я использую новый метод ArgumentMatchers.anyList:

import static org.mockito.Mockito.*;
import org.mockito.ArgumentMatchers;

verify(mock, atLeastOnce()).process(ArgumentMatchers.<Bar>anyList());

Comments

    Ничего не найдено.