반응형
JUnit5로 테스트 코드를 작성할 때 주로 검증 메서드로 assertThat, assertThatAll을 사용합니다.
추가로 assertSoftly에 대해 정리하면서, 3가지 메서드의 차이점에 대해 정리하겠습니다.
// 공통으로 사용되는 부분
private final int num1 = 5;
private final int num2 = 10;
private final int actual = num1 + num2;
assertThat
Assertions 라이브러리 중 junit, assertj 편한 것을 선택합니다.
저는 assertj를 사용해서 작성해 보겠습니다.
@Test
void assertThatTest() {
assertThat(actual).isEqualTo(15);
assertThat(actual).isEqualTo(20);
assertThat(actual).isEqualTo(15);
assertThat(actual).isEqualTo(10);
}
위 테스트 코드를 실행하면 아래와 같이 에러 메시지가 반환됩니다.
Expected, Actual 값과 에러가 발생한 코드 위치 아래에서 알려줍니다.
assertThat()은 검증이 실패하면 뒤에 있는 검증을 진행하지 않고 종료됩니다.
assertAll
@Test
void assertAllTest() {
assertAll(
() -> assertThat(actual).isEqualTo(15),
() -> assertThat(actual).isEqualTo(20),
() -> assertThat(actual).isEqualTo(15),
() -> assertThat(actual).isEqualTo(10)
);
}
assertAll은 assertThat을 모두 실행한 다음에, 검증이 실패한 코드의 예상값, 실제값 그리고 코드 위치를 알려줍니다.
검증이 실패한 assertThat의 위치를 예상값/실제값을 다 보여준 후에 맨 아래에서 보여주고 있어, assertSoftly보다 에러를 확인하는데 가독성이 떨어집니다.
assertSoftly
@Test
void assertSoftlyTest() {
assertSoftly(softly -> {
softly.assertThat(actual).isEqualTo(15);
softly.assertThat(actual).isEqualTo(20);
softly.assertThat(actual).isEqualTo(15);
softly.assertThat(actual).isEqualTo(10);
});
- assertAll()과 마찬가지로 모든 assert문을 실행한 후 실패한 테스트 코드의 예상값, 실제값을 출력합니다.
- 하지만, assertAll()과는 달리 실패한 코드의 라인 위치를 가독성 좋게 보여줍니다.
결론
단일 검증인 경우 : assertThat을 사용하여 처리한다.
검증 메서드가 많지 않은 경우 간단히 assertThat을 사용하는 것이 좋음
검증이 많은 경우 : assertSoftly를 사용한다.
테스트 코드 실행 시 문제가 발생하는 코드의 위치를 한눈에 파악하기 쉽다.
반응형
'Test > JUnit5' 카테고리의 다른 글
[Mockito] 스프링 Mockito 어노테이션 이해하기 - @Mock, @Spy, @InjectMocks, @Captor (1) | 2024.10.01 |
---|