matchers hamcrest

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 ?


cheques de artículos :

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.

contains cheques :

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 el Iterable 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"));