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:jUnit und Guava, vergleicht die Gleichheit der Liste nach der Transformation()
Set<MyClass> typesToGet = MyClassFactory.createInstances("furniture",
"audio equipment");
Collection<String> namesToGet = Collections2.transform(typesToGet,
new NameFunction<MyClass, String>());
List<MyClass> typesGotten = _svc.getAllByName(typesToGet);
assertThat(typesGotten.size(), is(typesToGet.size()));
Collection<String> namesGotten = Collections2.transform(typesGotten,
new NameFunction<ItemType, String>());
assertEquals(namesToGet, namesGotten); // fails here
ich derzeit diesen Fehler:
java.lang.AssertionError: expected: com.google.common.collect.Collections2$TransformedCollection<[audio equipment, furniture]> but was: com.google.common.collect.Collections2$TransformedCollection<[audio equipment, furniture]>
Also, was ist die sauberste, prägnante Art und Weise zu testen, dass ich Zeilen stieg wieder aus der Datenbank, deren name
Spalte die Namen übereinstimmt I sagte ich wollte? Ich könnte eine for
Schleife haben, die durchläuft und überprüft, dass jeder Name in der einen Liste in der anderen existiert, aber ich hoffte, genauer zu sein. So etwas wie der folgenden Pseudo-Code wäre schön:
List<MyClass> typesGotten = ...;
["furniture", "audio equipment"].equals(typesGotten.map(type => type.getName()))
Ich glaube, ich fand 'containsInAnyOrder' beschrieben auf http://www.jarvana.com/jarvana/view/org/hamcrest/hamcrest-library/1.2.1/hamcrest-library-1.2.1-javadoc .jar! /org/hamcrest/Matchers.html, aber ich sehe keine Dokumentation darüber. Weißt du, ob es bestätigt, dass die beiden Sammlungen dieselbe Größe haben, dass Sammlung 1 nur Elemente in Sammlung 2 enthält und dass Sammlung 2 nur Elemente in Sammlung 1 enthält? –
Die Hamcrest-Dokumentation fehlt in diesem Bereich ein wenig, daher lohnt es sich, ein paar Matcher auszuprobieren, um sich selbst davon zu überzeugen, dass sie das Richtige tun. Alternativ dazu finden Sie den Quellcode unter http://code.google.com/p/hamcrest/source/browse/trunk/hamcrest-java/hamcrest-library/src/main/java/org/hamcrest/collection/IsIterableContainingInAnyOrder.java ? r = 480. Ja, es prüft, ob Sammlung 1 alle Elemente von Sammlung 2 hat und umgekehrt, und daher dieselbe Größe haben. – Kkkev