web-dev-qa-db-fra.com

En quoi les hasItems, contient et contient-t-il AnAnyOrder de Hamcrest?

Hamcrest fournit un certain nombre de correspondants pour affirmer le contenu d'une collection. Tous ces cas passent:

Collection<String> c = ImmutableList.of("one", "two", "three");
assertThat(c, hasItems("one", "two", "three");
assertThat(c, contains("one", "two", "three");
assertThat(c, containsInAnyOrder("one", "two", "three");

Comment hasItems, contains et containsInAnyOrder diffèrent-ils?

42
Joe

hasItems vérifie :

des passages consécutifs sur le résultat Iterable examiné donnent au moins un élément égal à l’élément correspondant de la valeur spécifiée items.

Cela signifie que les collections contiennent au moins ces éléments dans n'importe quel ordre . Alors,

assertThat(c, hasItems("one", "two"));

passerait également, l’élément supplémentaire étant ignoré. Et:

assertThat(c, hasItems("three", "two", "one"));

passerait aussi.

contains vérifie :

un seul passage sur le Iterable examiné donne une série d'éléments, chacun logiquement égal à l'élément correspondant dans les éléments spécifiés. Pour une correspondance positive, l'itéré examiné doit être de la même longueur que le nombre d'éléments spécifiés.

Donc, il s'assure que la collection contient exactement ces éléments:

assertThat(c, contains("one", "two")); // Fails

Cela échouerait, car les restes "three" ne correspond pas.

assertThat(c, contains("three", "two", "one")); // Fails

Cela échoue car les éléments correspondants ne correspondent pas.

Un autre élément lié, containsInAnyOrder, vérifie que ces éléments sont exactement présents, mais dans n'importe quel ordre:

Crée un assembleur indépendant de l'ordre pour Iterables qui correspond lorsqu'un passage unique au-dessus de Iterable examiné donne une série d'éléments, chacun égal logiquement à un élément n'importe où dans les éléments spécifiés.

Un test avec un élément manquant échoue:

assertThat(c, containsInAnyOrder("one", "two")); // Fails

Mais tous les articles dans un ordre différent vont passer:

assertThat(c, containsInAnyOrder("three", "two", "one"));
57
Joe