jUnit und Guava, Vergleich der Listengleichheit nach der Transformation ()

7

In einem jUnit-Test möchte ich einige Zeilen aus der Datenbank basierend auf der Spalte name abrufen. Ich möchte dann testen, dass die Zeilen die Namen haben, die ich erwartet habe. Ich habe folgendes:

%Vor%

Ich erhalte derzeit diesen Fehler:

  

java.lang.AssertionError: expected: com.google.common.collect.Collections2 $ TransformedCollection & lt; [Audiogeräte, Möbel] & gt; aber war: com.google.common.collect.Collections2 $ TransformedCollection & lt; [Audiogeräte, Möbel] & gt;

Also, was ist der sauberste und prägnanteste Weg, um zu testen, dass ich Zeilen von der Datenbank zurückbekomme, deren name -Spalte mit den Namen übereinstimmt, die ich wollte? Ich könnte eine for -Schleife durchlaufen lassen und überprüfen, dass jeder Name in der einen Liste in der anderen existiert, aber ich hatte gehofft, genauer zu sein. Etwas wie der folgende Pseudocode wäre nett:

%Vor%     
Sarah Vessels 09.04.2012, 22:00
quelle

4 Antworten

15

Sie können containsAll() zweimal verwenden, um zu überprüfen, ob Sie einen fehlenden Wert oder einen unerwarteten Wert haben.

%Vor%

Wenn Sie sich jedoch dafür entscheiden, List oder Set anstelle von Collection zu verwenden, geben Sie an, dass ein List einem anderen List entspricht (gleich für Set ) iff enthält beide die gleichen Werte .

  

Vergleicht das angegebene Objekt mit dieser Liste auf Gleichheit. Gibt true zurück, wenn das angegebene Objekt auch eine Liste ist, beide Listen dieselbe Größe haben und alle entsprechenden Elementpaare in den beiden Listen gleich sind. (Zwei Elemente e1 und e2 sind gleich, wenn (e1==null ? e2==null : e1.equals(e2)) .) Mit anderen Worten, zwei Listen werden als gleich definiert, wenn sie dieselben Elemente in derselben Reihenfolge enthalten. Diese Definition stellt sicher, dass die equals-Methode verwendet wird funktioniert ordnungsgemäß über verschiedene Implementierungen der List -Schnittstelle.

Ressourcen:

Colin Hebert 09.04.2012, 22:09
quelle
6

Wenn Sie erwarten, dass sie dieselben Elemente enthalten, aber nicht unbedingt in derselben Reihenfolge, dann führen Sie einfach eine ImmutableSet -Kopie von beiden aus und prüfen Sie, ob diese Mengen gleich sind. Wenn Sie erwarten, dass sie die gleiche Reihenfolge haben, dann kopieren Sie ImmutableList und prüfen Sie, ob diese gleich sind.

Collection hat überhaupt keine Vorstellung von Gleichheit.

    
Louis Wasserman 09.04.2012 22:23
quelle
6

Die beste und ausdrucksvollste Art, eine solche Behauptung zu schreiben, ist mit einem Hamcrest-Matcher:

%Vor%     
Kkkev 10.04.2012 18:03
quelle
3

Guava hat eine Methode, die das Konzept, das Sie versuchen zu verstehen, gut kommuniziert: symmetrischeDifferenz . Wenn die symmetricDifference leer ist, sind die Mengen gleich.

%Vor%

Es ist jedoch nicht das "billigste", da es eine Vereinigungs-, Schnittpunkt- und Differenzoperation durchführt. Sie können auch prüfen, ob die Gruppen die gleiche Größe haben. Ist dies nicht der Fall, enthalten sie nicht die gleichen Elemente. Wenn dies der Fall ist, können Sie überprüfen, ob die Gruppe (asymmetrisch) Differenz ist leer.

%Vor%     
Ray 12.04.2012 13:45
quelle

Tags und Links