Mockito: Matcher mit Generika auflisten

Lesezeit: 2 Minuten

Benutzer-Avatar
Philipp Blajo

Mockito bietet:

when(mock.process(Matchers.any(List.class)));

Wie man eine Warnung vermeidet, wenn process nimmt ein List<Bar> stattdessen?

Benutzer-Avatar
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

Benutzer-Avatar
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()

1351920cookie-checkMockito: Matcher mit Generika auflisten

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy