Beachten Sie, dass assertEquals
auch direkt in Listen und Sets funktioniert. Dies ist viel weniger Tippen und es wird sehr klare Fehlermeldungen geben.
Wenn die Rückgabewerte keine Duplikate enthalten dürfen, sollten sie anstelle einer Liste ein Set zurückgeben. Wenn Sie die zu testende Funktion auf diese Weise ändern können, können Sie sie wie folgt testen:
%Vor%Wenn dies keine Option ist, sollten Sie sowohl die erwarteten als auch die tatsächlichen Ergebnisse sortieren und diese vergleichen:
%Vor% Schließlich könnten Sie Hamcrest Matcher verwenden (die Funktion containsInAnyOrder
ist in org.hamcrest.collection.IsIterableContainingInAnyOrder
):
Ich würde empfehlen, AssertJ -
zu verwenden %Vor%was Ihnen zusätzlich viele flüssigere Behauptungen gibt (besonders die Ausnahmebehandlung) auch ).
Ich würde die Antwort von Abubakkar mit Hamcrest vergleichen
kombinieren %Vor% Sie können eine boolesche Bedingung mit Stream#anyMatch(Predicate filter)
:
%Vor%Gibt zurück, ob Elemente dieses Streams mit dem angegebenen Prädikat übereinstimmen. Das Prädikat darf nicht für alle Elemente ausgewertet werden, wenn dies nicht zur Bestimmung des Ergebnisses erforderlich ist. Wenn der Stream leer ist, wird
false
zurückgegeben und das Prädikat wird nicht ausgewertet.
Wenn ich Hamcrest nicht kenne, wäre meine Lösung, jede Liste (oder Kopien davon, wenn es nicht akzeptabel ist, sie zu modifizieren) zu sortieren und dann zu bestätigen, dass sie gleich sind.
Stärke: Funktioniert auch, wenn doppelte Produkte in der Liste vorhanden sind (benötigt das gleiche Duplikat in der anderen Liste).
Sie können einen Stream verwenden, um die Namen aus der Produktliste zu extrahieren. einige der anderen Antworten zeigen bereits, wie.