Ich habe mich gefragt, ob jemand eine Möglichkeit kennt, mit assertThat()
und zu überprüfen, ob eine Liste leer ist Matchers
.
Der beste Weg, den ich sehen konnte, war, JUnit zu verwenden:
assertFalse(list.isEmpty());
Aber ich hatte gehofft, dass es in Hamcrest einen Weg gibt, dies zu tun.
java
collections
junit
hamcrest
Ian Dallas
quelle
quelle
Antworten:
Nun, es gibt immer
... aber ich vermute, das hast du nicht so gemeint :)
Alternative:
empty()
ist eine statische in derMatchers
Klasse. Beachten Sie die Notwendigkeit, werfen dielist
zuCollection
dank hamcrest 1.2 des wackelig Generika.Die folgenden Importe können mit hamcrest 1.3 verwendet werden
quelle
assertThat((Collection)list, is(not(empty())));
expected true but got false
Sie bekommen so etwas wieexpected empty but got [1, 2, 3]
assertThat(list, Matchers.<String>empty())
String
Dies ist in Hamcrest 1.3 behoben. Der folgende Code wird kompiliert und generiert keine Warnungen:
Wenn Sie jedoch eine ältere Version verwenden müssen, können Sie anstelle von Fehlern Folgendes
empty()
verwenden:hasSize(greaterThan(0))
(
import static org.hamcrest.number.OrderingComparison.greaterThan;
oderimport static org.hamcrest.Matchers.greaterThan;
)Beispiel:
Das Wichtigste an den oben genannten Lösungen ist, dass keine Warnungen generiert werden. Die zweite Lösung ist noch nützlicher, wenn Sie die minimale Ergebnisgröße schätzen möchten.
quelle
assertThat(list, not(hasSize(0)))
list
null
assertThat(list, hasSize(greaterThan(0)))
Wenn Sie nach lesbaren Fehlermeldungen suchen, können Sie auf hamcrest verzichten, indem Sie die üblichen assertEquals mit einer leeren Liste verwenden:
ZB wenn du rennst
du erhältst
quelle
Erstellen Sie Ihren eigenen IsEmpty TypeSafeMatcher:
Selbst wenn die generischen Probleme in
1.3
der großartigen Sache an dieser Methode behoben sind, funktioniert sie für jede Klasse, die eineisEmpty()
Methode hat! Nicht nurCollections
!Zum Beispiel wird es auch funktionieren
String
!quelle
Das funktioniert:
quelle