Hamcrest
이 글에서는 Hamcrest 라이브러리에 대해 정리한다.
정의
Hamcrest는 JUnit 기반 테스트에서 사용하는 Assertion Framework다.
Hamcrest는 다양한 Matcher를 제공해 객체의 속성이나 상태를 명확하고 직관적으로 검증할 수 있게 해준다.
Spring Test에서 Hamcrest를 사용하려면 관련 의존성을 프로젝트에 추가해야 한다.
testImplementation 'org.hamcrest:hamcrest:2.2'
testImplementation 'org.springframework:spring-test:5.3.8'
🧩 Hamcrest를 사용하는 이유
Hamcrest를 사용하는 이유는 다음과 같다.
첫째, Hamcrest는 테스트의 의도를 명확하게 표현한다.
// Hamcrest 사용 전 (JUnit 기본 assertion)
assertEquals(5, value);
// Hamcrest 사용 후
assertThat(value, is(5));
이렇게 하면 검증 코드가 문장처럼 읽혀서 이해하기 쉬워진다.
둘째, 다양한 Matcher를 제공한다.
Hamcrest는 단순한 값 비교뿐 아니라, 길이, 문자열 포함, 조건 조합 같은 복잡한 검증도 지원한다.
// 리스트의 크기 확인
assertThat(list, hasSize(3));
// 문자열이 특정 단어를 포함하는지 확인
assertThat("Hello, World!", containsString("World"));
셋째, 실패 메시지를 읽기 쉽다.
// 실패 예시
assertThat(value, is(5)); // Expected: is <5> but: was <4>
이처럼 테스트 코드와 실패 메시지를 함께 이해하기 쉬워진다.
⚠️ 예외
예외
java.lang.NoClassDefFoundError: com/jayway/jsonpath/Predicate
위와 같은 문제가 발생하면 JSONPath 라이브러리가 누락된 경우가 많다. 이럴 때는 Gradle 의존성을 추가해야 한다.
// JSONPath 라이브러리 추가
testImplementation 'com.jayway.jsonpath:json-path:2.8.0'
댓글남기기