Mockito: Lista de emparejadores con genéricos


Mockito ofrece:

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

¿Cómo evitar la advertencia si process toma un List<Bar> en su lugar?

Author: juankysmith, 2012-05-09

3 answers

Para Java 8 y superior, es fácil:

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

Para Java 7 y versiones posteriores, el compilador necesita un poco de ayuda. Use anyListOf(Class<T> clazz):

when(mock.process(Matchers.anyListOf(Bar.class)));
 232
Author: artbristol,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-10 11:41:00

Además de anyListOf anterior, siempre puede especificar genéricos explícitamente usando esta sintaxis:

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

Java 8 permite recientemente la inferencia de tipos basada en parámetros, por lo que si está utilizando Java 8, esto también puede funcionar:

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

Recuerde que ni any() ni anyList() aplicarán ninguna comprobación, incluidas las comprobaciones de tipo o null. En Mockito 2.x, any(Foo.class) se cambió para significar "cualquier instanceof Foo", pero any() todavía significa "cualquier valor incluyendo null".

NOTA: Lo anterior ha cambiado a ArgumentMatchers en versiones más recientes de Mockito, para evitar una colisión de nombres con org.hamcrest.Matchers. Las versiones anteriores de Mockito tendrán que seguir usando org.mockito.Matchers como antes.

 10
Author: Jeff Bowman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-04 18:58:41

Antes de Java 8 (versiones 7 o 6) utilizo el nuevo método ArgumentMatchers.AnyList:

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

verify(mock, atLeastOnce()).process(ArgumentMatchers.<Bar>anyList());
 0
Author: Miguel RS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-18 12:41:21