Skills/Java

Java - 간단한 예외처리 테스트

aoaa 2022. 11. 12. 21:05

이 글은 Junit5.8.1, assertj3.21 기준으로 작성되었습니다. 


1. assertThrows

 Assertions.assertThrow는 예상가능한 Exception를 던지고, 그 Exception을 반환합니다. 이 때 예외가 발생하지 않거나 다른 유형의 예외가 발생한다면 메서드는 실패하게 됩니다. 코드로 살펴보면

import static org.junit.jupiter.api.Assertions.assertThrows;

@Test
void test1( {
	Assertions.asserThrows(RuntimeException.class, () -> {
    	voyage.test();
        });
}

 람다식으로 voyage.test() 메서드를 실행하여 첫 인자인 RuntimeException과 같은지 검사합니다. 이 때 같은 타입이라면 테스트 코드가 통과하고, 그게 아니라면 AssertionFailError 메시지와 함께 fail이 일어납니다. 

 


2. assertThatThrownBy

 assertj테스트 코드의 가독성을 높여주기 위한 라이브러리 중 하나로 Junit과 함께 같이 사용됩니다.

import static org.assertj.core.api.Assertions.assertThatThrownBy;

@Test
void test2() {
	assertThatThrownBy(() -> Exception.validateException(1001))
    	.hasMessageContaining("잘못된 입력입니다.")
        .isInstanceOf(IllegalArgumentException.class);
    }
------------------------------------------------------------------
public static void validateException(int input) {
   if ((input % 1000 != 0) {
       throw new IllegalArgumentException("잘못된 입력입니다.");
   }
}

 assertjassertThatThrownBy 람다식으로 예외 테스트 코드를 작성,

.hasMessageContaining() 예외 메시지를 작성,

.isInstanceOf() 예상되는 Excpetion 타입을 작성합니다. 위의 코드와 같이 예상 메시지와 예외가 맞다면 테스트가 성공하게 되고, 메시지 혹은 예외 타입이 다르게 입력되었다면 AssertionError가 발생하게 됩니다.

 

 

 

 

참조

더보기