Mockito ofrece:
when(mock.process(Matchers.any(List.class)));
¿Cómo evitar la advertencia si processtoma un List<Bar>en su lugar?
Mockito ofrece:
when(mock.process(Matchers.any(List.class)));
¿Cómo evitar la advertencia si processtoma 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 anyListfunciona, 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>y List<DTO>he resuelto este problema usando ArgumentMatchersgenéricos:when(adapter.adapt(ArgumentMatchers.<DTO>anyList())).thenCallRealMethod();
Además de lo anyListOfanterior, 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 instanceofFoo", 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.Matcherscomo 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());