Mockito ofrece:
when(mock.process(Matchers.any(List.class)));
¿Cómo evitar la advertencia si processtoma 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. AunqueanyListfunciona, emite una advertencia.anyListOfestá 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 usandoArgumentMatchersgenéricos:when(adapter.adapt(ArgumentMatchers.<DTO>anyList())).thenCallRealMethod();Además de lo
anyListOfanterior, 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 "cualquierinstanceofFoo", 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.Matcherscomo 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