Existe-t-il un jUnit parallèle à NUnit CollectionAssert
?
En utilisant JUnit 4.4, vous pouvez utiliser assertThat()
avec le code Hamcrest (ne vous inquiétez pas, il est livré avec JUnit, pas besoin de _ .jar
) pour produire des assertions auto-descriptives complexes, y compris celles qui opèrent sur des collections:
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"))));
En utilisant cette approche, vous obtiendrez automatiquement une bonne description de l'assertion en cas d'échec.
Pas directement, non. Je suggère l'utilisation de Hamcrest , qui fournit un riche ensemble de règles de correspondance qui s'intègre bien avec jUnit (et d'autres cadres de test)
Jetez un oeil à FEST Fluent Assertions. À mon humble avis, ils sont plus pratiques à utiliser que Hamcrest (et également puissants, extensibles, etc.) et ont un meilleur support IDE grâce à une interface fluide. Voir https://github.com/alexruiz /fest-assert-2.x/wiki/Using-fest-assertions
La solution de Joachim Sauer est Nice mais ne fonctionne pas si vous avez déjà un éventail d'attentes que vous souhaitez vérifier sont dans votre résultat. Cela peut apparaître lorsque vous avez déjà une attente générée ou constante dans vos tests à laquelle vous souhaitez comparer un résultat, ou peut-être avez-vous plusieurs attentes que vous prévoyez de fusionner dans le résultat. Ainsi, au lieu d'utiliser des matchers, vous pouvez simplement utiliser List::containsAll
et assertTrue
Par exemple:
@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
}