Hamcrest는 JUnit 기반의 단위 테스트에서 사용할 수 있는 Assertion Framework이다.
JUnit에서도 Assertion 을 위한 다양한 메서드를 지원하지만 Hamcrest는 다음과 같은 이유로 JUnit에서 지원하는 Assertion 메서드보다 더 많이 사용된다.
public class HelloJunitTest {
@DisplayName("Hello Junit Test")
@Test
public void assertionTest1() {
String actual = "Hello, JUnit";
String expected = "Hello, JUnit";
assertEquals(expected, actual); // (1)
}
}
public class HelloHamcrestTest {
@DisplayName("Hello Junit Test using hamcrest")
@Test
public void assertionTest1() {
String expected = "Hello, JUnit";
String actual = "Hello, JUnit";
assertThat(actual, is(equalTo(expected))); // (1)
}
}
assertThat(actual, is(equalTo(expected)));
마치 영어문장과 같이 결과 값(actual)이 기대 값(expected)과 같다는 것을 검증(Assertion)한다.
처럼 해석할 수 있다. 즉, 알아보기가 쉽다.
public class AssertionNullHamcrestTest {
@DisplayName("AssertionNull() Test")
@Test
public void assertNotNullTest() {
String currencyName = getCryptoCurrency("ETH");
assertNotNull(currencyName, "should be not null");
}
private String getCryptoCurrency(String unit) {
return CryptoCurrency.map.get(unit);
}
}
public class AssertionNullHamcrestTest {
@DisplayName("AssertionNull() Test")
@Test
public void assertNotNullTest() {
String currencyName = getCryptoCurrency("ETH");
assertThat(currencyName, is(notNullValue())); // (1)
// assertThat(currencyName, is(nullValue())); // (2)
}
private String getCryptoCurrency(String unit) {
return CryptoCurrency.map.get(unit);
}
}
(2) 의 주석을 해제하고 실행 시
Expected: is null
but: was "Ethereum"
기대값은 null 이지만 실제 출력 값은 "Ethereum" 이라는 것을 직관적으로 알 수 있다.