给定一个Collection或Iterable一个项目,是否有任何Matcher(或匹配的组合)断言每个项目匹配一个Matcher?
例如,给定此项目类型:
public interface Person {
public String getGender();
}
Run Code Online (Sandbox Code Playgroud)
我想写一个断言,Persons 集合中的所有项都有特定的gender值.我在想这样的事情:
Iterable<Person> people = ...;
assertThat(people, each(hasProperty("gender", "Male")));
Run Code Online (Sandbox Code Playgroud)
没有each自己编写匹配器,有没有办法做到这一点?
Sot*_*lis 78
使用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")))));
Run Code Online (Sandbox Code Playgroud)
Hamcrest也提供Matchers#everyItem了快捷方式Matcher.
完整的例子
@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;
}
}
Run Code Online (Sandbox Code Playgroud)