Mockito bietet:
when(mock.process(Matchers.any(List.class)));
Wie vermeide ich eine Warnung, wenn stattdessen processeine genommen List<Bar>wird?
Mockito bietet:
when(mock.process(Matchers.any(List.class)));
Wie vermeide ich eine Warnung, wenn stattdessen processeine genommen List<Bar>wird?
Antworten:
Für Java 8 und höher ist es einfach:
when(mock.process(Matchers.anyList()));
Für Java 7 und niedriger benötigt der Compiler etwas Hilfe. Verwendung anyListOf(Class<T> clazz):
when(mock.process(Matchers.anyListOf(Bar.class)));
anyListOf. Obwohl es anyListfunktioniert, gibt es eine Warnung aus.
anyListOfist veraltet, daher ist es besser, es NICHT zu verwenden. Beispiel für Java 8 funktioniert nicht im Falle einer Methodenüberladung, zum Beispiel, wenn Sie eine Methode haben, die 2 verschiedene Listen akzeptiert: List<DBEntity>und List<DTO>ich habe dieses Problem ArgumentMatchersmit generic gelöst :when(adapter.adapt(ArgumentMatchers.<DTO>anyList())).thenCallRealMethod();
Darüber hinaus anyListOfkönnen Sie Generika immer explizit mit dieser Syntax angeben:
when(mock.process(Matchers.<List<Bar>>any(List.class)));
Java 8 ermöglicht neu die Typinferenz basierend auf Parametern. Wenn Sie also Java 8 verwenden, funktioniert dies möglicherweise auch:
when(mock.process(Matchers.any()));
Denken Sie daran , dass weder any()noch anyList()werden alle Kontrollen gelten, einschließlich des Typs oder null überprüft. In Mockito 2.x any(Foo.class)wurde geändert, um "beliebiges instanceofFoo" zu bedeuten , any()bedeutet aber immer noch "beliebiger Wert einschließlich null".
HINWEIS: In den neueren Versionen von Mockito wurde auf ArgumentMatchers umgestellt , um eine Namenskollision mit zu vermeiden org.hamcrest.Matchers. Ältere Versionen von Mockito müssen org.mockito.Matcherswie oben verwendet werden.
Matchers.any()ist sehr praktisch!
Vor Java 8 (Versionen 7 oder 6) verwende ich die neue Methode ArgumentMatchers.anyList:
import static org.mockito.Mockito.*;
import org.mockito.ArgumentMatchers;
verify(mock, atLeastOnce()).process(ArgumentMatchers.<Bar>anyList());