Czy istnieje jUnit równolegle do CollectionAssert NUnit?CollectionAssert w jUnit?
Odpowiedz
Korzystanie JUnit 4.4 można wykorzystać assertThat()
wraz z kodem Hamcrest (nie martw się, to wysyłają z JUnit, nie ma potrzeby dodatkowego .jar
) w celu wytworzenia kompleksu własnym opisując twierdzi, w tym te, które działają na zbiorach:
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"))));
Stosując to podejście będzie automagicznie uzyskać dobry opis dochodzić, gdy nie powiedzie się.
Nie bezpośrednio, nie. Sugeruję użycie Hamcrest, który zapewnia bogaty zestaw pasujących reguł, które integruje się dobrze z JUnit (i innych ram testowania)
nie skompilować z jakiegoś powodu (patrz http://stackoverflow.com/questions/1092981/hamcrests-hasitems): ArrayList
Spójrz na płynne asercje FEST. IMHO są bardziej wygodne w użyciu niż Hamcrest (i równie potężne, rozszerzalne itp.) I mają lepsze wsparcie IDE dzięki płynnemu interfejsowi. Zobacz: https://github.com/alexruiz/fest-assert-2.x/wiki/Using-fest-assertions
W 2017 roku wydaje się, że więcej osób korzysta z oddziału FEST nazwanego AssertJ. – Max
Rozwiązanie Joachima Sauera jest dobre, ale nie działa, jeśli masz już wiele oczekiwań, które chcesz zweryfikować. Może to pojawić się, gdy masz już wygenerowane lub stałe oczekiwanie w testach, do których chcesz porównać wynik, lub masz wiele oczekiwań, które mogą zostać połączone w wyniku. Więc zamiast korzystania dopasowujących można można po prostu użyć List::containsAll
i assertTrue
Dla przykładu:
@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
}
Ooh, nie zdawałem sobie sprawy, że hamcrest wszedł do dystrybucji. Idź Nat! – skaffman
Jeśli chcę potwierdzić, l składa się z elementów ("foo", "bar"), ale nie ma żadnych innych elementów - czy jest tam jakaś łatwa składnia? – ripper234
Skorzystaj z powyższego fragmentu kodu i dodaj dodatkowy argument assertTrue (l.size() == 2) – aberrant80