org matchers framework equalto corematchers containsstring assertequals java hamcrest

java - matchers - ¿Hay un Hamcrest "para cada" Matcher que afirma que todos los elementos de una Colección o Iterable coinciden con un solo Matcher específico?



import static org hamcrest corematchers containsstring (1)

Dada una Collection o Iterable de elementos, ¿hay algún Matcher (o combinación de emparejadores) que afirme que cada elemento coincide con un solo Matcher ?

Por ejemplo, dado este tipo de elemento:

public interface Person { public String getGender(); }

Me gustaría escribir una afirmación de que todos los artículos en una colección de Person s tienen un valor de gender específico. Estoy pensando algo como esto:

Iterable<Person> people = ...; assertThat(people, each(hasProperty("gender", "Male")));

¿Hay alguna manera de hacer esto sin escribir each matcher yo mismo?


Use el matcher Every .

import org.hamcrest.beans.HasPropertyWithValue; import org.hamcrest.core.Every; import org.hamcrest.core.Is; import org.junit.Assert; Assert.assertThat(people, (Every.everyItem(HasPropertyWithValue.hasProperty("gender", Is.is("male")))));

Hamcrest también proporciona Matchers#everyItem como acceso directo a ese Matcher .

Ejemplo completo

@org.junit.Test public void method() throws Exception { Iterable<Person> people = Arrays.asList(new Person(), new Person()); Assert.assertThat(people, (Every.everyItem(HasPropertyWithValue.hasProperty("gender", Is.is("male"))))); } public static class Person { String gender = "male"; public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } }