Hamcrest는 JUnit 기반의 단위 테스트에서 사용할 수 있는 Assertion Framework이다.
JUnit에서도 Assertion 을 위한 다양한 메서드를 지원하지만 Hamcrest는 다음과 같은 이유로 JUnit에서 지원하는 Assertion 메서드보다 더 많이 사용된다.
// JUnit에서의 Assertion
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class HelloJunitTest {
@DisplayName("Hello Junit Test")
@Test
public void assertionTest1() {
String actual = "Hello, JUnit";
String expected = "Hello, JUnit";
assertEquals(expected, actual); // (1)
}
}
// Hamcrest에서의 Assertion
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.is;
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)
}
}
위 코드는 Unit의 Assertion 메서드를 사용한 HelloJunitTest 클래스와 Hamcrest의 매쳐(Matcher)를 사용한 HelloHamcrestTest 클래스이다.
assertEquals(expected, actual);
assertThat(actual, is(equalTo(expected)));
assert that actual is equal to expected
라는 하나의 영어 문장으로 자연스럽게 읽혀진다.결과 값(actual)이 기대 값(expected)과 같다는 것을 검증(Assertion)한다.
’ 정도로 해석할 수 있다.assertThat()
메서드의 파라미터