Question

Y at-il un parallèle JUnit au CollectionAssert ?

Était-ce utile?

La solution

JUnit 4.4, vous pouvez utiliser assertThat() avec le Hamcrest code (ne vous inquiétez pas, il est livré avec JUnit, pas besoin d'un .jar supplémentaire) pour produire complexe auto-description, y compris ceux qui affirment opèrent sur les 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 automagiquement une bonne description de l'assertion quand il échoue.

Autres conseils

Pas directement, non. Je suggère l'utilisation de Hamcrest , qui fournit un ensemble de règles de correspondance qui intègre bien avec JUnit (et d'autres frameworks de test)

Jetez un oeil à FEST Courant Assertions. À mon humble avis, ils sont plus faciles à utiliser que Hamcrest (et tout aussi puissant, extensible, etc.) et ont de meilleures grâce de support IDE à interface fluide. Voir https://github.com/alexruiz/fest- affirmer-2.x / wiki / Utilisation-fest-assertions

La solution de Joachim Sauer est agréable mais ne dispose fonctionne pas si vous avez déjà un tableau d'attentes que vous souhaitez vérifier sont dans votre résultat. Cela peut arriver quand vous avez déjà une attente générée ou constante dans vos tests que vous voulez comparer un résultat, ou peut-être que vous avez plusieurs attentes que vous attendez à fusionner dans le résultat. Ainsi, au lieu d'utiliser matchers vous pouvez 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
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top