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;
}
}