matchers - ¿En qué se diferencian los artículos de Hamcrest, los contenidos y los contenidos de InInnyOrder?
hamcrest java (1)
Hamcrest proporciona una serie de comparadores para afirmar el contenido de una colección. Todos estos casos pasan:
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");
¿En qué se hasItems
, los contains
y los containsInAnyOrder
hasItems
?
los pases consecutivos sobre el iterable examinado producen al menos un artículo que es igual al artículo correspondiente de los
items
especificados.
Es decir, se asegura de que las colecciones contengan al menos estos elementos, en cualquier orden . Asi que,
assertThat(c, hasItems("one", "two"));
También pasaría, con el elemento extra siendo ignorado. Y:
assertThat(c, hasItems("three", "two", "one"));
También pasaría.
una sola pasada sobre el
Iterable
examinado produce una serie de artículos, cada uno lógicamente igual al artículo correspondiente en los artículos especificados. Para una coincidencia positiva, el iterable examinado debe ser de la misma longitud que el número de elementos especificados.
Por lo tanto, se asegura de que la colección contenga exactamente estos elementos:
assertThat(c, contains("one", "two")); // Fails
Esto fallaría, ya que las "three"
restantes no coinciden.
assertThat(c, contains("three", "two", "one")); // Fails
Esto falla porque los elementos correspondientes no coinciden.
Otro emparejador relacionado, containsInAnyOrder
, checks que exactamente esos elementos están presentes, pero en cualquier orden:
Crea un orden de comparación independiente para
Iterables
que coincide cuando una sola pasada sobre elIterable
examinado produce una serie de elementos, cada uno lógicamente igual a un elemento en cualquier lugar en los elementos especificados.
Una prueba con un elemento faltante falla:
assertThat(c, containsInAnyOrder("one", "two")); // Fails
Pero todos los artículos en un orden diferente pasarán:
assertThat(c, containsInAnyOrder("three", "two", "one"));