Mockito bietet:
when(mock.process(Matchers.any(List.class)));
Wie man eine Warnung vermeidet, wenn process
nimmt ein List<Bar>
stattdessen?
Philipp Blajo
Mockito bietet:
when(mock.process(Matchers.any(List.class)));
Wie man eine Warnung vermeidet, wenn process
nimmt ein List<Bar>
stattdessen?
Kunstbristol
Für Java 8 und höher ist es einfach:
when(mock.process(Matchers.anyList()));
Für Java 7 und darunter benötigt der Compiler ein wenig Hilfe. Verwenden anyListOf(Class<T> clazz)
:
when(mock.process(Matchers.anyListOf(Bar.class)));
Hinweis: Dies ist in Mockito 2. * veraltet und wird in Mockito 3 entfernt. Veraltet, da der Java 8-Compiler den Typ jetzt ableiten kann.
– Kipp
29. November 2016 um 0:02 Uhr
@artbristol weißt du, ob mit anySet() genauso funktionieren sollte wie mit anyList()? Ich bin in Java 8 und in Eclipse IDE wird eine Warnung ausgegeben
– Fernando Fradegrada
14. Juli 2017 um 13:47 Uhr
Besser zu verwenden anyListOf
. Wenngleich anyList
funktioniert, gibt es eine Warnung aus.
– Balki
26. Oktober 2017 um 0:37 Uhr
anyListOf
ist veraltet, daher ist es besser, es NICHT zu verwenden. Beispiel für Java 8 funktioniert nicht bei Methodenüberlastung, zum Beispiel wenn Sie eine Methode haben, die 2 verschiedene Listen akzeptiert: List<DBEntity>
und List<DTO>
Ich habe dieses Problem mit gelöst ArgumentMatchers
mit generisch: when(adapter.adapt(ArgumentMatchers.<DTO>anyList())).thenCallRealMethod();
– edufinn
8. Juli 2019 um 11:11 Uhr
Jeff Bowmann
Zusätzlich zu anyListOf
oben können Sie Generika immer explizit mit dieser Syntax angeben:
when(mock.process(Matchers.<List<Bar>>any(List.class)));
Java 8 ermöglicht neu Typrückschlüsse basierend auf Parametern. Wenn Sie also Java 8 verwenden, funktioniert dies möglicherweise auch:
when(mock.process(Matchers.any()));
Erinnere dich daran auch nicht any()
Noch anyList()
wendet alle Prüfungen an, einschließlich Typ- oder Nullprüfungen. In Mockito 2.x, any(Foo.class)
wurde geändert, um “beliebig” zu bedeuten instanceof
Puh“, aber any()
bedeutet immer noch “jeder Wert einschließlich null
“.
HINWEIS: Oben wurde umgeschaltet auf ArgumentMatcher in neueren Versionen von Mockito, um eine Namenskollision mit zu vermeiden org.hamcrest.Matchers
. Ältere Versionen von Mockito müssen weiterhin verwendet werden org.mockito.Matchers
wie oben.
Matchers.any()
ist sehr bequem!
– MBach
12. Mai 2016 um 8:58 Uhr
Matchers ist jetzt veraltet, hier sind die Informationen von mockito „Use ArgumentMatchers. This class is now veraltet, um einen Namenskonflikt mit der Klasse Hamcrest org.hamcrest.Matchers zu vermeiden. Diese Klasse wird wahrscheinlich in Version 3.0 entfernt.“ static.javadoc.io/org.mockito/mockito-core/2.7.21/org/mockito/…
– Oddmeter
4. April 2017 um 18:51 Uhr
@oddmeter Änderungen vorgenommen.
– Jeff Bowmann
4. April 2017 um 18:59 Uhr
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());
ich brauchte anyList()
mit einer typisierten ArrayList funktionierte Folgendes:
(ArrayList<Bar>) ArgumentMatchers.<Bar>anyList()