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