====== hamcrest ======
* http://hamcrest.org/ : 원래 Java용이었으나 다양한 언어로 만들어짐.
* [[http://www.javacodegeeks.com/2015/11/hamcrest-matchers-tutorial.html|Hamcrest matchers tutorial]]
* [[http://www.javacodegeeks.com/2015/11/custom-hamcrest-matchers.html|Custom Hamcrest Matchers]]
===== 의존성 =====
* 의존성을 걸때는 최소한 ''hamcrest-core''와 ''hamcrest-library''를 함께 걸어줘야 충분한 Matcher들을 확보할 수 있다.
* 그렇지 않으면 한번에 ''hamcrest-all''에 걸어준다.
===== hasProperty =====
* [[http://www.jarvana.com/jarvana/view/org/hamcrest/hamcrest-library/1.2.1/hamcrest-library-1.2.1-javadoc.jar!/org/hamcrest/Matchers.html#hasProperty%28java.lang.String,%20org.hamcrest.Matcher%29|hasProperty]] : CoreMatchers가 아니 [[http://mvnrepository.com/artifact/org.hamcrest/hamcrest-library|Matchers]]에 있다.
* 객체의 전체를 비교하지 않고 일부 필드의 값만 비교하고자 할 때 사용한다. 특히, 컬렉션과 연동해서 사용할 때 좋다.
* 단일 객체 비교
User user = new User("이하늬", 20, "몰라"); // name, age, description
// 테스트 결과 Matchers.hasProperty(..) 형태로 사용해야만 제대로 작동했다.
assertThat(user, Matchers.hasProperty("name", is("이하늬")));
user = new User(null, 20, "몰라"); // name, age, description
assertThat(user, Matchers.hasProperty("name", nullValue()));
* 컬렉션
List users = new ArrayList();
users.add(new User("이하늬", 20, "예뻐~"));
users.add(new User("김태희", 30, "더 예뻐~"));
assertThat(users, Matchers.hasItem(Matchers.hasProperty("name", is("김태희"))));
* [[http://theholyjava.wordpress.com/2011/10/15/hasproperty-the-hidden-gem-of-hamcrest-and-assertthat/|hasProperty, the Hidden Gem of Hamcrest]] 다른 예. containsInAnyOrder. (Iterable