Existe-t-il un jUnit parallèle à celui de NUnit ? CollectionAssert
?
Ooh, je n'avais pas réalisé que Hamcrest avait fait son entrée dans la distro junit. Allez Nat !
En utilisant JUnit 4.4, vous pouvez utiliser assertThat()
avec le Hamcrest (ne vous inquiétez pas, il est livré avec JUnit, pas besoin d'un code supplémentaire). .jar
) pour produire des assertions complexes auto-décrites, 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 lorsqu'elle échoue.
Ooh, je n'avais pas réalisé que Hamcrest avait fait son entrée dans la distro junit. Allez Nat !
Si je veux affirmer que l est composé d'éléments ("foo", "bar"), mais qu'aucun autre élément n'existe, existe-t-il une syntaxe simple pour cela ?
Pas directement, non. Je suggère l'utilisation de Hamcrest qui fournit un riche ensemble de règles de correspondance qui s'intègrent parfaitement à jUnit (et à d'autres cadres de test).
Cela ne compile pas pour une raison quelconque (voir stackoverflow.com/questions/1092981/hamcrests-hasitems ) : ArrayList<Integer> actual = new ArrayList<Integer>() ; ArrayList<Integer> expected = new ArrayList<Integer>() ; actual.add(1) ; expected.add(2) ; assertThat(actual, hasItems(expected)) ;
Jetez un coup d'œil à FEST Fluent Assertions. Je pense qu'elles sont plus pratiques à utiliser que Hamcrest (et tout aussi puissantes, extensibles, etc.) et ont un meilleur support IDE grâce à leur interface fluide. Voir https://github.com/alexruiz/fest-assert-2.x/wiki/Using-fest-assertions
La solution de Joachim Sauer est intéressante mais ne fonctionne pas si vous avez déjà un tableau d'attentes que vous voulez vérifier dans votre résultat. Cela peut se produire lorsque vous avez déjà une attente générée ou constante dans vos tests à laquelle vous voulez comparer un résultat, ou peut-être que vous avez plusieurs attentes qui devraient être fusionnées dans le résultat. Ainsi, au lieu d'utiliser des matchers, vous pouvez simplement utiliser List::containsAll
y 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
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.