JUnit5를 이용해 예외 발생 케이스를 테스트하는 방법을 알아봅니다.
방법 1. assertThrows()
메서드 사용
Exception 발생 여부 확인과 Exception 메시지를 비교할 수 있습니다.
아래는 CafeKiosk
서비스 클래스의 add(~)
메서드에 0 혹은 음수를 전달했을 때 예외가 잘 발생하는지 확인하는 테스트 메서드입니다.
class CafeKioskTest {
@Test
@DisplayName("[FAILED] 음료 수량으로 음수, 0은 불가능하다.")
void addWithCount() {
// given
CafeKiosk cafeKiosk = new CafeKiosk();
// then
Exception exception = assertThrows(OperationFailedException.class, () -> {
operator.divide(3, 0);
});
assertEquals(exception.getMessage(), OPERATION_FAILED_ERROR.getMessage());
}
}
org.assertj.core.api.Assertions
클래스의 assertThat()
도 사용할 수 있습니다.
assertThat(exception.getMessage()).isEqualTo(OPERATION_FAILED_ERROR.getMessage());
방법 2. assertThatThrownBy
메서드 사용
org.assertj.core.api.Assertions
클래스의 assertThatThrownBy
메서드입니다.
class CafeKioskTest {
@Test
@DisplayName("[FAILED] 음료 수량으로 음수, 0은 불가능하다.")
void addWithCount() {
// given
CafeKiosk cafeKiosk = new CafeKiosk();
// when & then
assertThatThrownBy(() -> cafeKiosk.add(new Americano(), 0))
.isInstanceOf(IllegalArgumentException.class)
.hasMessage("음료는 1잔부터 주문할 수 있습니다.");
}
}
예외 테스트 케이스를 작성할 때 중요한 점
경계값 테스트를 해야 한다.
- 범위(이상/이하/초과/미만), 구간, 날짜 등
참고
- https://www.baeldung.com/junit-5
- 인프런 "실용적인 테스트 가이드"
반응형
'Test Code' 카테고리의 다른 글
[참고 글] Test Double (0) | 2024.05.17 |
---|---|
테스트 환경에서 환경변수 설정하기 (0) | 2024.04.16 |
[JUnit5] @Mock 필드 초기화 시점에 따른 @BeforeAll 이슈 (@BeforeEach, 테스트코드의 라이프 사이클) (1) | 2024.04.07 |
[테스트 코드] Controller Test Code / @WebMvcTest / 행위 검증 (0) | 2024.02.12 |