Mockito ofrece:
when(mock.process(Matchers.any(List.class)));
¿Cómo evitar la advertencia si process
toma un List<Bar>
en su lugar?
Mockito ofrece:
when(mock.process(Matchers.any(List.class)));
¿Cómo evitar la advertencia si process
toma un List<Bar>
en su lugar?
Respuestas:
Para Java 8 y superior, es fácil:
when(mock.process(Matchers.anyList()));
Para Java 7 y versiones inferiores, el compilador necesita un poco de ayuda. Uso anyListOf(Class<T> clazz)
:
when(mock.process(Matchers.anyListOf(Bar.class)));
anyListOf
. Aunque anyList
funciona, emite una advertencia.
anyListOf
está en desuso, por lo que es mejor NO usarlo. Ejemplo para Java 8 no funciona en caso de sobrecarga de métodos, por ejemplo, si tiene un método que acepta 2 listas diferentes: List<DBEntity>
y List<DTO>
he resuelto este problema usando ArgumentMatchers
genéricos:when(adapter.adapt(ArgumentMatchers.<DTO>anyList())).thenCallRealMethod();
Además de lo anyListOf
anterior, siempre puede especificar genéricos explícitamente utilizando esta sintaxis:
when(mock.process(Matchers.<List<Bar>>any(List.class)));
Java 8 recientemente permite 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 any()
ni anyList()
aplicará ningún cheque, incluidos los cheques de tipo o nulos. En Mockito 2.x, any(Foo.class)
se cambió para significar "cualquier instanceof
Foo", pero any()
aún significa "cualquier valor incluido null
".
NOTA: Lo anterior se 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 deberán seguir usándose org.mockito.Matchers
como se indicó anteriormente.
Matchers.any()
es muy conveniente!
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());