우당탕탕 좌충우돌 개발일기

테스트 케이스 - assertThrows 본문

Programming/JAVA

테스트 케이스 - assertThrows

성동구불주먹 2024. 1. 9. 10:21

assertThrows는 JUnit 5에서 제공하는 메서드로, 특정 예외가 발생하는지 테스트하는 데 사용된다.

특히 메서드가 예외를 던지는 것을 예상하고, 해당 예외가 실제로 발생하는지 테스트할 때 유용하게 사용되는 특징이 있다.

 

 

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

public class MyServiceTest {

    @Test
    public void testDivideByZero() {
        MyService myService = new MyService();

        // 특정 메서드 호출 시 ArithmeticException이 발생하는지 확인
        assertThrows(ArithmeticException.class, () -> {
            myService.divide(10, 0);
        });
    }

    @Test
    public void testInvalidInput() {
        MyService myService = new MyService();

        // 특정 메서드 호출 시 IllegalArgumentException이 발생하는지 확인
        assertThrows(IllegalArgumentException.class, () -> {
            myService.processInput(null);
        });
    }
}

 

 

해당 예제에서 assertThrows는 두 가지 테스트를 수행한다.

  1. testDivideByZero: MyService 클래스의 divide 메서드를 호출할 때 0으로 나누는 경우 ArithmeticException이 발생하는지 확인
  2. testInvalidInput: MyService 클래스의 processInput 메서드를 호출할 때 인자로 null이 전달되는 경우 IllegalArgumentException이 발생하는지 확인

assertThrows는 두 개의 매개변수를 받는다.

첫 번째 매개변수는 예상되는 예외의 타입이고, 두 번째 매개변수는 실행해야 할 코드 블록(lambda 표현식)이다.

이 코드 블록 안에서 예외가 발생해야 테스트가 통과된다.

이를 통해 특정 상황에서 예외가 발생하는지 테스트하고, 예외의 타입이 예상한 것과 일치하는지 확인할 수 있다.

 

 

 


 

 

🤨💡 그럼 여기서 궁금증은, try - catch 구문을 쓰면 되지 않나?

 

try - catch 구문 대신 asssertThrows를 쓰는 데는 여러 이유가 있다.

 

  1. 가독성: assertThrows를 사용하면 예외 처리 코드가 더 간결해진다.
    try-catch 블록을 사용하면 예외 처리 코드가 길어질 수 있고, 테스트의 핵심 로직이 눈에 잘 띄지 않을 수 있다.


  2. 테스트 목적 명시: assertThrows를 사용하면 코드의 목적이 더 명시적으로 드러난다.
    특정 상황에서 예외가 발생해야 하는지를 테스트하기 위해 assertThrows를 사용하면 테스트 코드가 더 읽기 쉬워진다.

  3. 테스트 실패 시 메시지: assertThrows를 사용하면 예외가 발생하지 않았을 때 나타나는 테스트 실패 메시지를 제공할 수 있다.
    assertThrows의 세 번째 매개변수로 실패 시 출력할 메시지를 전달할 수 있어, 테스트 실패 시 빠르게 문제를 파악할 수 있다.

  4. 검증 대상의 명확한 구분: try-catch를 사용하면 예외 처리와 관련된 로직이 코드의 여러 부분에 흩어져 있을 수 있다. 반면에 assertThrows를 사용하면 검증 대상이 명확하게 표현되므로, 어떤 부분이 검증되고 있는지 쉽게 이해할 수 있다.

간단한 테스트에서는 try-catch를 사용해도 괜찮지만, 여러 테스트에서 반복되는 예외 검증이 필요한 경우에는 assertThrows를 사용하여 테스트 코드를 더 간결하고 명확하게 작성할 수 있다.

반응형

'Programming > JAVA' 카테고리의 다른 글

InputStream / OutputStream(byte단위)  (1) 2024.06.11
스프링 빈과 의존관계(Dependency Injection)  (0) 2024.01.12
AfterEach 어노테이션 사용법  (2) 2024.01.04
테스트 케이스 - Assertions  (1) 2024.01.04
Getter & Setter  (0) 2023.12.19