JUnit Hamcrest 断言
JUnit Hamcrest assertion
是否有一个 Hamcrest Matcher
可以让我清楚地断言一种方法的结果,returns 一个 Collection
个对象,至少有一个对象包含 属性 具有一定的价值?
例如:
class Person {
private String name;
}
被测方法returns集合Person
。
我需要断言至少有一个人叫彼得。
首先,您需要创建一个 Matcher
that can match a Person
's name. Then, you could use hamcrest's 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")));
}
}
是否有一个 Hamcrest Matcher
可以让我清楚地断言一种方法的结果,returns 一个 Collection
个对象,至少有一个对象包含 属性 具有一定的价值?
例如:
class Person {
private String name;
}
被测方法returns集合Person
。
我需要断言至少有一个人叫彼得。
首先,您需要创建一个 Matcher
that can match a Person
's name. Then, you could use hamcrest's 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")));
}
}