Hamcrest
Hamcrest는 JUnit 기반의 단위 테스트에서 사용할 수 있는 Assertion Framework이다.
- Assertion을 위한 Matcher가 자연스러운 문장으로 이어지므로 가독성이 향상된다.
- 테스트 실패 메시지를 이해하기 쉽다.
- 다양한 Matcher를 제공한다.
이러한 이유로 JUnit에서 지원하는 Assertion 메서드보다 많이 사용된다.
Hamcrest의 Matcher 이용하기
assertionTest1()은 JUnit의 Assertion을 이용하여 작성한 테스트 코드이다. assertionTest2()는 Hamcrest의 Matchers를 이용하여 작성한 테스트 코드이다. 두 코드 모두 같은 테스트를 하고 있는 테스트이다. 하지만 Assertion을 사용하는 부분에서 차이가 있다.
JUnit의 Assertion을 사용해도 코드만 보고 무슨 테스트를 하고 싶은지 알 수 있을 것이다.
하지만 Hamcrest의 Matchers를 사용한 것은 코드를 그대로 해석하면 해당 테스트 코드가 무엇을 하고 싶은지 보다 더 쉽게 알 수 있다. 'Assert that actual is equal to expected'는 '결과 값(actual)이 기대 값(expected)과 같다는 것을 검증(assertion)한다'라고 해석할 수 있어 해당 코드를 단순히 해석하는 것만으로도 원하는 테스트가 무엇인지를 바로 알 수 있다.
- assertThat(결과 값, 기대 값)
두 테스트에 대해서 failed이 되는 경우의 메시지를 확인해 보면 아래와 같다.
- JUnit의 Assertion 메서드를 사용한 경우
- Hamcrest의 Matchers를 사용한 경우
두 에러 메시지를 확인해 보면 Hamcrest의 경우, 에러 메시지가 하나의 문장으로 연결되어 하나의 문장으로 가독성이 좋은 메시지를 띄워준다는 것을 알 수 있다.
(1)은 JUnit의 Assertion을 이용한 것이고, (2), (3)은 Hamcrest를 이용한 것이다. Hamcrest가 테스트 내용을 좀 더 명확하게 나타내고 있는 것을 볼 수 있다.
Hamcrest를 알기 전에는 JUnit도 상당히 이해하기 쉽게 테스트 케이스를 작성할 수 있게 해준다고 생각했다. 근데 Hamcrest를 접하고 이게 가독성을 높이는 거구나 싶었다. 직관적인 함수명들을 통해 개발을 함에 있어서 변수명과 함수명을 짓는 것의 중요성을 여기서 더 깨달은 것 같다!
'Spring & SpringBoot > Testing' 카테고리의 다른 글
@SpringBootTest, @AutoConfigureMockMvc 사용하여 API Flow 테스트 케이스 작성하기 (0) | 2022.11.10 |
---|---|
JUnit Assertion 메서드, 테스트 케이스 작성 애너테이션 (1) | 2022.11.08 |
여러 테스트 방식, 단위테스트의 FIRST 원칙, GWT(given-when-then) (1) | 2022.11.08 |