Mockito bietet:
when(mock.process(Matchers.any(List.class)));
Wie vermeide ich eine Warnung, wenn stattdessen process
eine genommen List<Bar>
wird?
Mockito bietet:
when(mock.process(Matchers.any(List.class)));
Wie vermeide ich eine Warnung, wenn stattdessen process
eine 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 anyList
funktioniert, gibt es eine Warnung aus.
anyListOf
ist 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 ArgumentMatchers
mit generic gelöst :when(adapter.adapt(ArgumentMatchers.<DTO>anyList())).thenCallRealMethod();
Darüber hinaus anyListOf
kö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 instanceof
Foo" 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.Matchers
wie 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());