Mit Mockito kann ich Folgendes tun:
verify(someService).process(any(Person.class));
Aber wie schreibe ich das, wenn process
nimmt ein Collection<Person>
stattdessen? Verstehe nicht wie man es richtig schreibt. Bekomme nur Syntaxfehler…
Mit Mockito kann ich Folgendes tun:
verify(someService).process(any(Person.class));
Aber wie schreibe ich das, wenn process
nimmt ein Collection<Person>
stattdessen? Verstehe nicht wie man es richtig schreibt. Bekomme nur Syntaxfehler…
Versuchen:
verify(someService).process(Matchers.<Collection<Person>>any());
Tatsächlich hat IntelliJ diesen Fix automatisch vorgeschlagen, als ich tippte any()
… Leider können Sie in diesem Fall keinen statischen Import verwenden.
Danke, es funktioniert … aber Gott, es sieht schrecklich aus, es muss einen schöneren Weg geben, das zu korrigieren …
– Cristiano Fontes
10. Januar 2013 um 19:01 Uhr
Daumen hoch für die einzige Lösung, die die Frage wie angegeben beantwortet, anstatt auf den Sonderfall übereinstimmender Container abzuzielen.
– Adam Parkin
15. November 2013 um 4:07 Uhr
Diese Antwort ist nun falsch. Die folgende Antwort bietet eine bessere Lösung.
– Taucher
26. Oktober 2015 um 18:58 Uhr
Ich kann mich irren, aber ich glaube nicht, dass dies die richtige Antwort ist. Obwohl die Warnung entfernt wird, wechselt die Überprüfung von „any(Collection.class)“ zu any(), wodurch nichts überprüft wird. Zumindest bevor es einen Klassencheck gab. Ist es nicht?
– Gabriel Falcone
16. März 2017 um 23:06 Uhr
Matchers
ist veraltet, sollte jetzt verwendet werden ArgumentMatchers
.
– Strahl
12. August 2019 um 16:54 Uhr
Versuchen :
verify(someService).process(anyCollectionOf(Person.class));
Seit Version 1.8 Mockito stellt sich vor
public static <T> Collection<T> anyCollectionOf(Class<T> clazz);
Für andere, die dazu kommen und es brauchen, gibt es zusätzlich zu anyCollectionOf() auch eine anyListOf(), siehe: stackoverflow.com/a/10512526/908677
– Elijah Lofgren
16. August 2016 um 18:47 Uhr
anyCollectionOf(Class
– Naxos84
9. Januar 2018 um 11:15 Uhr
Wenn Sie eine eigene Methode verwenden, können Sie sogar den statischen Import verwenden:
private Collection<Person> anyPersonCollection() {
return any();
}
Dann können Sie verwenden
verify(someService).process(anyPersonCollection());
Als Alternative zur akzeptierten Antwort können Sie Folgendes versuchen:
verify(someService).process(Mockito.<SomeGenericClass<Person>>any());
Wo ich verwendet habe org.mockito.Mockito
Anstatt von Matchers
.
Waldheinz
Sie können dies wegen Typlöschung nicht ausdrücken. Selbst wenn Sie es in Code ausdrücken könnten, hatte Mockito keine Chance, es zur Laufzeit zu überprüfen. Sie könnten eine Schnittstelle wie erstellen
interface PersonCollection extends Collection<Person> { /* nothing */ }
stattdessen und verwenden Sie dies im gesamten Code.
Bearbeiten: Ich habe mich geirrt, Mockito hat jedeSammlungVon(..) was du willst.
Eigentlich ist es könnte mit einem “Type Literal”-Objekt ausgedrückt werden, wenn die API dies akzeptiert hat: any(new TypeLiteral<Collection<Person>>() {})
. Natürlich nicht schön, aber es funktioniert, da alle Typinformationen zur Laufzeit verfügbar sind (über Reflection oder eine Bytecode-Bibliothek).
– Rogerio
30. Mai 2011 um 11:49 Uhr
@Rogerio: Du hast Recht, und es scheint, dass Mockito dies jetzt tatsächlich unterstützt. Habe es lange nicht benutzt…
– Waldheinz
30. Mai 2011 um 11:56 Uhr
Eigentlich ist es könnte mit einem “Type Literal”-Objekt ausgedrückt werden, wenn die API dies akzeptiert hat: any(new TypeLiteral<Collection<Person>>() {})
. Natürlich nicht schön, aber es funktioniert, da alle Typinformationen zur Laufzeit verfügbar sind (über Reflection oder eine Bytecode-Bibliothek).
– Rogerio
30. Mai 2011 um 11:49 Uhr
@Rogerio: Du hast Recht, und es scheint, dass Mockito dies jetzt tatsächlich unterstützt. Habe es lange nicht benutzt…
– Waldheinz
30. Mai 2011 um 11:56 Uhr