@FabricioLemos Issue # 97 scheint gelöst und mit dem Master-Git-Zweig zusammengeführt zu sein. Hoffen wir, dass es bald in der nächsten Hamcrest-Veröffentlichung erscheinen wird.
– Rafalmag
13. Mai 2012 um 19:34 Uhr
@rafalmag Gute Stelle. Wird gut sein, alle meine nicht so lesbaren Behauptungen zu beheben, wenn v1.3 veröffentlicht wird
– andyb
25. Mai 2012 um 15:33 Uhr
Skaffmann
Nun, es gibt immer
assertThat(list.isEmpty(), is(false));
… aber ich schätze, das ist nicht ganz das, was du meinst 🙂
Alternative:
assertThat((Collection)list, is(not(empty())));
empty() ist eine Statik in der Matchers Klasse. Beachten Sie die Notwendigkeit, die zu werfen list zu Collectiondank der wackeligen Generika von Hamcrest 1.2.
Die folgenden Importe können mit hamcrest 1.3 verwendet werden
Ich finde, dass Hamcrest-Code viel schöner aussieht, wenn Sie Ihre Syntaxhervorhebung ändern, um die Klammern unsichtbar zu machen …
– Skaffmann
2. September 2010 um 20:53 Uhr
@tkeE2036: Das sind die kaputten Generika von Hamcrest bei der Arbeit. Manchmal müssen Sie umwandeln, damit es kompiliert wird, z assertThat((Collection)list, is(not(empty())));
– Skaffmann
2. September 2010 um 21:46 Uhr
@dzieciou es gibt Ihnen eine bessere Fehlermeldung, wenn der Test fehlschlägt. Also statt expected true but got false du bekommst sowas wie expected empty but got [1, 2, 3]
– Brad Cupit
22. Oktober 2012 um 14:10 Uhr
Wenn Sie keine ungeprüfte Konvertierung bevorzugen und bereit sind, auf den statischen Import zu verzichten, können Sie die Generics zur Methode hinzufügen, wie z. assertThat(list, Matchers.<String>empty()) (vorausgesetzt, die Liste ist eine Sammlung von Strings)
– Ohrkamera
18. Juni 2013 um 3:03 Uhr
@Ian diese Antwort ist veraltet und es gibt bessere Antworten, die jetzt stattdessen akzeptiert werden sollten.
– Benutzer177800
15. September 2015 um 1:45 Uhr
Rafalmag
Dies wurde in Hamcrest 1.3 behoben. Der folgende Code wird kompiliert und generiert keine Warnungen:
// given
List<String> list = new ArrayList<String>();
// then
assertThat(list, is(not(empty())));
Aber wenn Sie ältere Version verwenden müssen – statt verwanzt empty() Du könntest benutzen:
hasSize(greaterThan(0))
(import static org.hamcrest.number.OrderingComparison.greaterThan; oder import static org.hamcrest.Matchers.greaterThan;)
Beispiel:
// given
List<String> list = new ArrayList<String>();
// then
assertThat(list, hasSize(greaterThan(0)));
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.
@rogerdpack Bitte schön. Ich habe das Beispiel im 1.3-Stil hinzugefügt. 🙂
– Rafalmag
9. Dezember 2015 um 22:20 Uhr
Wenn Sie auf lesbare Fehlermeldungen aus sind, können Sie auf Hamcrest verzichten, indem Sie das übliche assertEquals mit einer leeren Liste verwenden:
java.lang.AssertionError
Expected :[]
Actual :[foo, bar]
Es ist wirklich schön zu sehen, was in der vermeintlich leeren Liste übrig geblieben ist!
– David
1. Oktober 2014 um 13:55 Uhr
Erstellen Sie Ihren eigenen benutzerdefinierten IsEmpty TypeSafeMatcher:
Auch wenn die Generika-Probleme behoben sind 1.3 Das Tolle an dieser Methode ist, dass sie für jede Klasse funktioniert, die eine hat isEmpty() Methode! Nicht nur Collections!
Zum Beispiel wird es weiter funktionieren String auch!
/* Matches any class that has an <code>isEmpty()</code> method
* that returns a <code>boolean</code> */
public class IsEmpty<T> extends TypeSafeMatcher<T>
{
@Factory
public static <T> Matcher<T> empty()
{
return new IsEmpty<T>();
}
@Override
protected boolean matchesSafely(@Nonnull final T item)
{
try { return (boolean) item.getClass().getMethod("isEmpty", (Class<?>[]) null).invoke(item); }
catch (final NoSuchMethodException e) { return false; }
catch (final InvocationTargetException | IllegalAccessException e) { throw new RuntimeException(e); }
}
@Override
public void describeTo(@Nonnull final Description description) { description.appendText("is empty"); }
}
Das funktioniert:
assertThat(list,IsEmptyCollection.empty())
13430200cookie-checkPrüfen, ob eine Liste in Hamcrest nicht leer istyes
Für eine bessere Lösung stimmen Sie für: code.google.com/p/hamcrest/issues/detail?id=97
– Fabricio Lemos
2. Oktober 2010 um 15:40 Uhr
@FabricioLemos Issue # 97 scheint gelöst und mit dem Master-Git-Zweig zusammengeführt zu sein. Hoffen wir, dass es bald in der nächsten Hamcrest-Veröffentlichung erscheinen wird.
– Rafalmag
13. Mai 2012 um 19:34 Uhr
@rafalmag Gute Stelle. Wird gut sein, alle meine nicht so lesbaren Behauptungen zu beheben, wenn v1.3 veröffentlicht wird
– andyb
25. Mai 2012 um 15:33 Uhr