Zastanawiałem się, czy ktoś znał sposób sprawdzenia, czy lista jest pusta za pomocą assertThat()
i Matchers
?
Najlepszy sposób, w jaki mogłem zobaczyć, po prostu użyj JUnit:
assertFalse(list.isEmpty());
Miałem jednak nadzieję, że w Hamcrest da się to zrobić.
java
collections
junit
hamcrest
Ian Dallas
źródło
źródło
Odpowiedzi:
Cóż, zawsze jest
... ale domyślam się, że nie do końca to miałeś na myśli :)
Alternatywnie:
empty()
jest statyczny wMatchers
klasie. Zwróć uwagę na potrzebę rzucenialist
doCollection
, dzięki dziwacznym genom Hamcrest 1.2.Następujący import może być używany z hamcrestem 1.3
źródło
assertThat((Collection)list, is(not(empty())));
expected true but got false
ciebie dostajesz coś takiegoexpected empty but got [1, 2, 3]
assertThat(list, Matchers.<String>empty())
String
Naprawiono to w Hamcrest 1.3. Poniższy kod kompiluje się i nie generuje żadnych ostrzeżeń:
Ale jeśli musisz użyć starszej wersji - zamiast zbugowanej
empty()
możesz użyć:hasSize(greaterThan(0))
(
import static org.hamcrest.number.OrderingComparison.greaterThan;
lubimport static org.hamcrest.Matchers.greaterThan;
)Przykład:
Najważniejsze w powyższych rozwiązaniach jest to, że nie generuje żadnych ostrzeżeń. Drugie rozwiązanie jest jeszcze bardziej przydatne, jeśli chcesz oszacować minimalną wielkość wyniku.
źródło
assertThat(list, not(hasSize(0)))
będzie udany , jeślilist
jestnull
, w przeciwieństwie doassertThat(list, hasSize(greaterThan(0)))
Jeśli szukasz czytelnych wiadomości o niepowodzeniach, możesz obejść się bez hamcrest, używając zwykłych assertEquals z pustą listą:
Np. Jeśli biegniesz
dostajesz
źródło
Utwórz własny, niestandardowy IsEmpty TypeSafeMatcher:
Nawet jeśli problemy generyczne zostały rozwiązane,
1.3
wielką zaletą tej metody jest to, że działa ona na każdej klasie, która maisEmpty()
metodę! Nie tylkoCollections
!Na przykład to też zadziała
String
!źródło
To działa:
źródło