是否有一个Hamcrest Matcher
干净地让我断言返回Collection
个对象的方法的结果至少有一个包含具有特定值的属性的对象?
例如:
class Person {
private String name;
}
测试中的方法返回Person
的集合。
我需要断言至少有一个人被称为彼得。
答案 0 :(得分:2)
首先,您需要创建一个可以匹配Person
名称的Matcher
。然后,您可以使用hamcrest的CoreMatchers#hasItem
来检查Collection
是否有此数学家匹配的项目。
就我个人而言,我喜欢在static
方法中匿名声明这些匹配器作为一种语法上的含糖:
public class PersonTest {
/** Syntactic sugaring for having a hasName matcher method */
public static Matcher<Person> hasName(final String name) {
return new BaseMatcher<Person>() {
public boolean matches(Object o) {
return ((Person) o).getName().equals(name);
}
public void describeTo(Description description) {
description.appendText("Person should have the name ")
.appendValue(name);
}
};
}
@Test
public void testPeople() {
List<Person> people =
Arrays.asList(new Person("Steve"), new Person("Peter"));
assertThat(people, hasItem(hasName("Peter")));
}
}