HanSol's Oak Cask

JUnit4 @RunWith vs JUnit5 @ExtendWith 차이점 정리 본문

GPT가 말아주는 지식

JUnit4 @RunWith vs JUnit5 @ExtendWith 차이점 정리

HanSol_Lim 2025. 2. 7. 15:07

JUnit에서 테스트 실행 방식을 지정하는 방법은 JUnit 4와 JUnit 5에서 다릅니다. JUnit 4에서는 @RunWith 어노테이션을 사용하지만, JUnit 5에서는 @ExtendWith가 그 역할을 대신합니다. 이 글에서는 @RunWith가 무엇인지 설명하고, JUnit 5에서는 어떻게 변경되었는지 정리해보겠습니다.


1. @RunWith 어노테이션 (JUnit 4)

@RunWithJUnit 4에서 테스트 실행 방식을 변경할 때 사용하는 어노테이션입니다. 기본적으로 JUnit 4는 BlockJUnit4ClassRunner라는 실행기를 사용하지만, @RunWith를 사용하면 원하는 실행기로 변경할 수 있습니다.

📌 주요 사용 예

  • Spring 테스트: @RunWith(SpringRunner.class) → Spring 환경에서 테스트 실행
  • Mockito 테스트: @RunWith(MockitoJUnitRunner.class) → Mockito 기반 테스트 실행
  • 매개변수 테스트: @RunWith(Parameterized.class) → 매개변수화된 테스트 실행

예제: JUnit 4에서 @RunWith 사용

import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;

@RunWith(MockitoJUnitRunner.class) // Mockito 기반 테스트 실행
public class MyTest {
    
    @Test
    public void testSomething() {
        System.out.println("JUnit 4에서 @RunWith 사용");
    }
}

2. JUnit 5에서 @RunWith의 대체 방법

JUnit 5에서는 @RunWith가 제거되고 **@ExtendWith**가 도입되었습니다. JUnit 5는 확장 개념을 도입하여 특정 실행기 대신 확장(Extension)을 활용하도록 변경되었습니다.

예제: JUnit 5에서 @ExtendWith 사용

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.junit.jupiter.MockitoExtension;

@ExtendWith(MockitoExtension.class) // JUnit 5에서는 @ExtendWith 사용
public class MyTest {
    
    @Test
    public void testSomething() {
        System.out.println("JUnit 5에서 @ExtendWith 사용");
    }
}

📌 주요 변경 사항

  • @RunWith(MockitoJUnitRunner.class)@ExtendWith(MockitoExtension.class)
  • @RunWith(SpringRunner.class)@ExtendWith(SpringExtension.class)
  • @RunWith(Parameterized.class)@ParameterizedTest 사용 (JUnit 5의 새로운 기능)

3. JUnit 4 → JUnit 5 변경 사항 정리

기능JUnit 4 (@RunWith)JUnit 5 (@ExtendWith)

Spring 테스트 @RunWith(SpringRunner.class) @ExtendWith(SpringExtension.class)
Mockito 테스트 @RunWith(MockitoJUnitRunner.class) @ExtendWith(MockitoExtension.class)
매개변수 테스트 @RunWith(Parameterized.class) @ParameterizedTest 사용
커스텀 실행기 @RunWith(CustomRunner.class) @ExtendWith(CustomExtension.class)

4. 결론

JUnit 5에서는 @RunWith가 제거되고 @ExtendWith가 그 역할을 대신합니다.

  • Spring, Mockito 같은 확장 기능을 적용할 때 @ExtendWith를 사용해야 합니다.
  • 매개변수 테스트는 @ParameterizedTest를 사용하여 구현합니다.
  • 새로운 프로젝트에서는 JUnit 5 스타일을 사용하는 것이 더 권장됩니다.

📌 JUnit 4와 JUnit 5를 비교하며 프로젝트에 맞는 테스트 방식을 선택해보세요! 😊