HanSol's Oak Cask

JUnit4의 @Test(expected = ...)는 JUnit5에서 지원 X 본문

GPT가 말아주는 지식

JUnit4의 @Test(expected = ...)는 JUnit5에서 지원 X

HanSol_Lim 2025. 3. 26. 10:31

✅ JUnit4 @Test(expected = ...) vs JUnit5 assertThrows() 차이 정리

JUnit5로 넘어오면서 기존 JUnit4에서 사용하던 예외 테스트 방식이 달라졌습니다. 아래에서 차이점과 적용 방법을 정리해보았습니다.


1. JUnit4 방식 (✅ 가능)

JUnit4에서는 @Test 어노테이션에 expected 속성을 이용하여 예외 발생 여부를 테스트했습니다.

@Test(expected = IllegalArgumentException.class)
public void testExceptionThrown() {
    someMethodThatThrows();  // 예외가 발생해야 테스트 통과
}

2. JUnit5 방식 (❌ expected 불가, ✅ assertThrows 사용)

JUnit5에서는 @Test(expected = ...) 문법이 제거되었습니다. 대신, Assertions.assertThrows() 메서드를 사용해야 합니다.

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

@Test
void testExceptionThrown() {
    assertThrows(IllegalArgumentException.class, () -> {
        someMethodThatThrows();
    });
}

💡 예외 메시지까지 검증하고 싶다면?

@Test
void testExceptionWithMessage() {
    IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> {
        someMethodThatThrows();
    });
    assertEquals("예상 에러 메시지", exception.getMessage());
}

✅ 정리 표

 

항목  JUnit4 JUnit5
예외 테스트 방식 @Test(expected = ...) assertThrows() 사용
예외 메시지 검증 불편함 가능 (getMessage())
람다식 사용 불필요 필수 (() -> {})

✍️ 결론

JUnit5에서는 @Test(expected = ...) 문법이 삭제되었으므로,
반드시 assertThrows() 로 예외 발생 여부를 확인해야 합니다.
더 정교하게 예외 메시지나 속성을 검증할 수도 있어 유연성이 높아졌습니다.