1
是否有一個Hamcrest Matcher
乾淨地讓我斷言返回對象的方法的結果至少有一個對象包含具有某個值的屬性?JUnit Hamcrest斷言
例如:
class Person {
private String name;
}
的方法下測試返回的Person
集合。 我需要聲明至少有一個人被稱爲彼得。
是否有一個Hamcrest Matcher
乾淨地讓我斷言返回對象的方法的結果至少有一個對象包含具有某個值的屬性?JUnit Hamcrest斷言
例如:
class Person {
private String name;
}
的方法下測試返回的Person
集合。 我需要聲明至少有一個人被稱爲彼得。
首先,您需要創建一個Matcher
,它可以匹配Person
的名稱。然後,您可以使用hamcrest的CoreMatchers#hasItem
來檢查Collection
是否有這個mathcer匹配的項目。
就個人而言,我喜歡在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")));
}
}
完美的解釋。謝謝! –
你甚至可以使用hasProperty匹配器來避免寫一個hasName匹配器:assertThat(people,hasItem(hasProperty(「name」,equalTo(「Peter」))));' –
@StefanBirkner好的改進, 謝謝! – Mureinik