Wie würden Sie die Gleichheit der Collection
Elemente, insbesondere a Set
in JUnit 4, kurz und bündig behaupten ?
102
Wie würden Sie die Gleichheit der Collection
Elemente, insbesondere a Set
in JUnit 4, kurz und bündig behaupten ?
Antworten:
Sie können behaupten, dass die beiden
Set
s gleich sind, wodurch dieSet
equals()
Methode aufgerufen wird .Dies
@Test
ist erfolgreich, wenn die beidenSet
s dieselbe Größe haben und dieselben Elemente enthalten.quelle
equals
undhashCode
in der Klasse implementiert , dass Sie in Ihrem Hashtable sind speichern?Apache kommt wieder zur Rettung.
Klappt wunderbar. Ich weiß nicht warum, aber ich habe festgestellt, dass bei Sammlungen Folgendes
assertEquals(coll1, coll2)
nicht immer funktioniert. Für den Fall, dass es für mich fehlschlug, hatte ich zwei Sammlungen, die von Sets unterstützt wurden. Weder Hamcrest noch Junit würden sagen, dass die Sammlungen gleich waren, obwohl ich sicher wusste, dass sie es waren. Mit CollectionUtils funktioniert es perfekt.quelle
mit hamcrest :
mit klarer Behauptung:
NB: t Die Methode equals () der konkreten Mengenklasse wird verwendet
quelle
Ein besonders interessanter Fall ist der Vergleich
und
Bisher sehe ich nur die Lösung, beide in Sets umzuwandeln
Oder ich könnte sie Element für Element vergleichen.
quelle
Als zusätzliche Methode, die auf Arrays basiert, können Sie die Verwendung ungeordneter Array-Zusicherungen in junitx in Betracht ziehen. Obwohl das Beispiel Apache CollectionUtils funktioniert, gibt es dort auch eine Reihe solider Assertion-Erweiterungen:
ich glaube, dass der
Der Ansatz ist für Sie viel besser lesbar und debuggbar (alle Sammlungen unterstützen toArray (), daher sollte es einfach genug sein, die ArrayAssert-Methoden zu verwenden.
Der Nachteil hierbei ist natürlich, dass junitx eine zusätzliche JAR-Datei oder ein Maven-Eintrag ist ...
quelle
Überprüfen Sie diesen Artikel . Ein Beispiel von dort:
quelle
Verwenden von Hamcrest:
Dies funktioniert auch, wenn die Sets unterschiedliche Datentypen haben und über den Unterschied berichten, anstatt nur zu versagen.
quelle
Wenn Sie überprüfen möchten, ob eine Liste oder ein Satz einen Satz bestimmter Werte enthält (anstatt ihn mit einer bereits vorhandenen Sammlung zu vergleichen), ist häufig die toString-Methode für Sammlungen hilfreich:
Dies ist etwas kürzer als das erste Erstellen der erwarteten Sammlung und der Vergleich mit der tatsächlichen Sammlung und einfacher zu schreiben und zu korrigieren.
(Zugegeben, dies ist keine besonders saubere Methode und kann ein Element "foo, bar" nicht von zwei Elementen "foo" und "bar" unterscheiden. In der Praxis halte ich es jedoch für das Wichtigste, dass es einfach und schnell ist, Tests zu schreiben , sonst werden viele Entwickler einfach nicht ohne Druck.)
quelle
Ich mag die Lösung von Hans-Peter Störr ... Aber ich denke, es ist nicht ganz richtig. Leider
containsInAnyOrder
nicht AkzeptierteCollection
von objetcs zu vergleichen. Also muss es einCollection
vonMatcher
s sein:Die Importe sind:
quelle