이 글에서는 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'

연결문서

댓글남기기