JUnit 4.4에 추가된 assertThat()
참조
http://junit.sourceforge.net/doc/ReleaseNotes4.4.html
흠.. 맨날 쓰는 메소드만 쓰다보니까, 새로운 기능들을 전혀 몰랐네요;
assertThat() 처럼 멋진 메소드를 이제야 알게 됐습니다.
보통 값을 비교할 때 assertEquals()를 사용해서
assertEquals(new Integer(2), game.getLeastTryCount());
이런식으로 값을 비교합니다. 메소드에 넘겨주는 첫 번째 인자가 기대값이고 뒤에 오는 인자가 실제 값인데, 사실 인자들의 순서가 바껴도 테스트 목적에는 별 다른 지장을 주지 않습니다. 위에서 테스트한 것과 동일한 내용을 assertThat()을 사용하여 다음과 같이 작성할 수 있습니다.
assertThat(game.getLeastTryCount(), is(2));
코드를 한 번 읽어보시죠. 훨씬 좋치 않나요? 위에서 사용한 is() 라는 메소드는 JUnit이 처음로 의존성을 가지고 사용하는 제 3자의 클래스들 입니다. Hamcrest라는 프로젝트 인데, Matcher를 확장한 다양한 메소드들을 제공해주고 있습니다. 그 중 하나가 is() 입니다. 따라서 import 문이 필요한데, 위에서 is만 사용한거 보니까 static import 겠거니.. 하고 짐작을 하셨겠죠?
import static org.hamcrest.CoreMatchers.*;
이렇게 추가해주시면 됩니다.
문장이 읽기 좋다는 장점 외에도 다음과 같은 장점들이 있습니다.
- 콤비네이션 가능. is(not(3)) 이나 eather(2).or(3) 같은 조합을 이뤄서 사용할 수 있음.
- assertEquals() 보다 더 가독성 높은 에러 메시지.
- 커스텀 매처 사용하능.
JUnit 4.4 가 제공하는 매처들
- org.hamcrest.CoreMatchers
- org.junit.matchers.JUnitMatchers.