정지용
기술스택 목록
테스트

JUnit 5

프로젝트 1에서 사용했습니다. 각 프로젝트에서 어떤 역할로 썼는지 아래에 정리했습니다.

이 기술은 무엇인가요?

Java 애플리케이션을 위한 현대적인 단위 테스트 프레임워크

JUnit 5는 Java 생태계에서 가장 널리 사용되는 테스트 프레임워크입니다. JUnit 4의 한계를 극복하고자 완전히 새롭게 설계되었으며, 모듈화된 아키텍처와 람다 표현식 지원, 확장 모델 등을 제공합니다. 개발자가 작성한 코드가 의도대로 동작하는지 자동으로 검증하고, 리팩토링 시 안전망을 제공하는 것이 주요 목적입니다.

이럴 때 사용합니다

  • Java 프로젝트에서 단위 테스트를 작성할 때
  • 통합 테스트나 E2E 테스트 프레임워크의 기반이 필요할 때
  • Spring Boot 등 Java 프레임워크와 함께 테스트 자동화를 구축할 때
  • CI/CD 파이프라인에서 코드 품질을 자동으로 검증하고 싶을 때

핵심 개념

@Test
테스트 메서드임을 표시하는 어노테이션입니다. 이 어노테이션이 붙은 메서드는 테스트 실행 시 자동으로 호출됩니다.
Assertion
예상 결과와 실제 결과를 비교하여 테스트 성공/실패를 판정하는 메서드입니다. assertEquals, assertTrue 등이 대표적입니다.
@BeforeEach / @AfterEach
각 테스트 메서드 실행 전후에 자동으로 실행되는 메서드를 지정하는 어노테이션입니다. 테스트 환경 초기화나 정리 작업에 사용됩니다.
Extension
JUnit 5의 확장 모델로, 테스트 생명주기에 커스텀 동작을 추가할 수 있습니다. @ExtendWith 어노테이션으로 활성화합니다.
@ParameterizedTest
하나의 테스트 메서드를 여러 입력값으로 반복 실행할 수 있게 해주는 기능입니다. 동일한 로직을 다양한 케이스로 검증할 때 유용합니다.

기본적인 JUnit 5 테스트 클래스

Calculator 클래스의 덧셈과 나눗셈 메서드를 검증하는 테스트입니다. setUp 메서드로 각 테스트마다 새로운 인스턴스를 준비합니다.

Java
import org.junit.jupiter.api.*;
import static org.junit.jupiter.api.Assertions.*;

class CalculatorTest {
    private Calculator calculator;

    @BeforeEach
    void setUp() {
        calculator = new Calculator();
    }

    @Test
    void addTwoNumbers() {
        int result = calculator.add(2, 3);
        assertEquals(5, result);
    }

    @Test
    void divideByZeroThrowsException() {
        assertThrows(ArithmeticException.class, () -> {
            calculator.divide(10, 0);
        });
    }
}

처음 쓸 때 흔한 함정

  • @Test 어노테이션 패키지를 JUnit 4(org.junit)가 아닌 JUnit 5(org.junit.jupiter.api)에서 import해야 함
  • 테스트 메서드는 반드시 void를 반환하고 매개변수가 없어야 함(ParameterizedTest 제외)
  • @BeforeAll, @AfterAll 메서드는 static으로 선언해야 하며, 클래스 전체에서 한 번만 실행됨

위 개요는 기술 학습을 돕기 위해 자동 생성된 일반 설명입니다. 정확한 사양과 최신 정보는 공식 문서를 확인하세요.

프로젝트별 활용 방식

위 개념이 실제 프로젝트에서 어떻게 쓰였는지 보여줍니다.

함께 사용한 기술

위 프로젝트들에서 같이 쓰인 다른 기술입니다.