Frage

Gibt es eine jUnit parallel zu NUnit CollectionAssert ?

War es hilfreich?

Lösung

Mit JUnit 4.4 Sie assertThat() zusammen mit dem hamcrest Code (keine Sorge verwenden können, ist es im Lieferumfang JUnit, keine Notwendigkeit für eine zusätzliche .jar) zu erzeugen komplexe selbstbeschreibende behauptet darunter auch solche, die auf Sammlungen arbeiten:

import static org.junit.Assert.assertThat;
import static org.junit.matchers.JUnitMatchers.*;
import static org.hamcrest.CoreMatchers.*;

List<String> l = Arrays.asList("foo", "bar");
assertThat(l, hasItems("foo", "bar"));
assertThat(l, not(hasItem((String) null)));
assertThat(l, not(hasItems("bar", "quux")));
// check if two objects are equal with assertThat()

// the following three lines of code check the same thing.
// the first one is the "traditional" approach,
// the second one is the succinct version and the third one the verbose one 
assertEquals(l, Arrays.asList("foo", "bar")));
assertThat(l, is(Arrays.asList("foo", "bar")));
assertThat(l, is(equalTo(Arrays.asList("foo", "bar"))));

Mit diesem Ansatz werden Sie automatisch eine gute Beschreibung des assert erhalten, wenn es nicht.

Andere Tipps

Nicht direkt, nein. Ich schlage vor, die Verwendung von hamcrest , die eine reiche Reihe von passenden Regeln liefert, die gut mit jUnit integriert (und andere Test-Frameworks)

Hier finden Sie aktuelle FEST Fluent Assertions. IMHO sind sie bequemer als hamcrest zu verwenden (und ebenso leistungsstarke, erweiterbare usw.) und eine bessere IDE-Unterstützung dank fließend Schnittstelle. Siehe https://github.com/alexruiz/fest- behaupten-2.x / wiki / Verwenden-fest-Behauptungen

Joachim Sauer-Lösung ist schön, aber nicht funktioniert, wenn Sie bereits eine Reihe von Erwartungen, die Sie in Ihr Ergebnis überprüfen möchten sind. Dies könnte kommen, wenn Sie bereits eine generierte oder konstante Erwartung in Ihren Tests haben, dass Sie ein Ergebnis, vergleichen wollen oder Sie haben vielleicht mehrere Erwartungen, die Sie erwarten in der Folge zusammengeführt werden. Anstatt also Matcher verwenden können Sie nur verwenden List::containsAll und assertTrue Beispiel:

@Test
public void testMerge() {
    final List<String> expected1 = ImmutableList.of("a", "b", "c");
    final List<String> expected2 = ImmutableList.of("x", "y", "z");
    final List<String> result = someMethodToTest(); 

    assertThat(result, hasItems(expected1)); // COMPILE ERROR; DOES NOT WORK
    assertThat(result, hasItems(expected2)); // COMPILE ERROR; DOES NOT WORK

    assertTrue(result.containsAll(expected1));  // works~ but has less fancy
    assertTrue(result.containsAll(expected2));  // works~ but has less fancy
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top