JUnit Hamcrest断言

时间:2015-06-20 14:29:25

标签: java junit junit4 hamcrest

是否有一个Hamcrest Matcher干净地让我断言返回Collection个对象的方法的结果至少有一个包含具有特定值的属性的对象?

例如:

class Person {
   private String name;
}

测试中的方法返回Person的集合。 我需要断言至少有一个人被称为彼得。

1 个答案:

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