Mockito ofrece:
when(mock.process(Matchers.any(List.class)));
¿Cómo evitar la advertencia si process
toma un List<Bar>
en su lugar?
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
. AunqueanyList
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>
yList<DTO>
he resuelto este problema usandoArgumentMatchers
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: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:
Recuerde que
any()
nianyList()
aplicará ningún cheque, incluidos los cheques de tipo o nulos. En Mockito 2.x,any(Foo.class)
se cambió para significar "cualquierinstanceof
Foo", peroany()
aún significa "cualquier valor incluidonull
".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ándoseorg.mockito.Matchers
como se indicó anteriormente.fuente
Matchers.any()
es muy conveniente!Antes de Java 8 (versiones 7 o 6) utilizo el nuevo método ArgumentMatchers.anyList:
fuente