Czy istnieje jUnit równoległy do NUnit CollectionAssert
?
84
Używając JUnit 4.4, możesz używać assertThat()
razem z kodem Hamcrest (nie martw się, jest dostarczany z JUnit, nie ma potrzeby dodatkowego .jar
) do tworzenia złożonych samoopisujących potwierdzeń, w tym tych, które działają na kolekcjach:
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"))));
Korzystając z tego podejścia, automagicznie uzyskasz dobry opis potwierdzenia, gdy zawiedzie.
Nie bezpośrednio, nie. Sugeruję użycie Hamcrest , który zapewnia bogaty zestaw reguł dopasowywania, który ładnie integruje się z jUnit (i innymi frameworkami testowymi)
źródło
Spójrz na FEST Fluent Assertions. IMHO są wygodniejsze w użyciu niż Hamcrest (i równie potężne, rozszerzalne itp.) I mają lepszą obsługę IDE dzięki płynnemu interfejsowi. Zobacz https://github.com/alexruiz/fest-assert-2.x/wiki/Using-fest-assertions
źródło
Rozwiązanie Joachima Sauera jest fajne, ale nie działa, jeśli masz już szereg oczekiwań, które chcesz zweryfikować. Może się tak zdarzyć, gdy masz już wygenerowane lub stałe oczekiwanie w swoich testach, z którym chcesz porównać wynik, lub być może masz wiele oczekiwań, które spodziewasz się scalić w wyniku. Więc zamiast korzystać z dopasowań, możesz po prostu użyć
List::containsAll
iassertTrue
Na przykład:@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 }
źródło
hasItems(expected1.toArray(new String[expected1.size()]))
. Zapewni lepsze komunikaty o błędach.