PHpullh
학습 라이브러리/Java/JUnit 5 파라미터화 테스트

JAVA · 테스트

JUnit 5 파라미터화 테스트

JUnit 5의 @ParameterizedTest로 하나의 테스트 메서드를 다양한 입력 데이터로 반복 실행합니다. CSV, Enum, Method 소스 등 다양한 데이터 공급 방식을 지원합니다.

테스트중급junit5parameterized-testtestingdata-driven

핵심 설명

JUnit 5의 @ParameterizedTest로 하나의 테스트 메서드를 다양한 입력 데이터로 반복 실행합니다. CSV, Enum, Method 소스 등 다양한 데이터 공급 방식을 지원합니다.

Java code

import org.junit.jupiter.api.*;
import org.junit.jupiter.params.*;
import org.junit.jupiter.params.provider.*;
import static org.junit.jupiter.api.Assertions.*;
import java.util.stream.Stream;

class CalculatorTest {
    // 1. @ValueSource — 단일 값 배열
    @ParameterizedTest(name = "{0}은 양수")
    @ValueSource(ints = {1, 5, 100, Integer.MAX_VALUE})
    void isPositive(int number) {
        assertTrue(number > 0);
    }

    // 2. @CsvSource — CSV 형태로 여러 파라미터
    @ParameterizedTest(name = "{0} + {1} = {2}")
    @CsvSource({
        "1, 2, 3",
        "0, 0, 0",
        "-1, 1, 0",
        "100, -50, 50"
    })
    void testAdd(int a, int b, int expected) {
        assertEquals(expected, a + b);
    }

    // 3. @EnumSource — Enum 값 순회
    @ParameterizedTest
    @EnumSource(value = java.time.Month.class,
                names = {"APRIL", "JUNE", "SEPTEMBER", "NOVEMBER"})
    void has30Days(java.time.Month month) {
        assertEquals(30, month.maxLength());
    }

    // 4. @MethodSource — 메서드에서 테스트 데이터 제공
    @ParameterizedTest(name = "palindrome: {0}")
    @MethodSource("palindromeProvider")
    void testPalindrome(String input, boolean expected) {
        String reversed = new StringBuilder(input).reverse().toString();
        assertEquals(expected, input.equals(reversed));
    }

    static Stream<Arguments> palindromeProvider() {
        return Stream.of(
            Arguments.of("racecar", true),
            Arguments.of("hello", false),
            Arguments.of("madam", true),
            Arguments.of("", true)
        );
    }
}

학습 팁

name 속성으로 각 테스트 케이스의 표시 이름을 커스터마이징하면 테스트 리포트가 읽기 쉬워집니다. @NullAndEmptySource@ValueSource와 함께 사용하면 null, 빈 문자열 테스트를 자동 추가합니다.

주의할 점

@MethodSource의 메서드는 반드시 static이어야 합니다(테스트 클래스가 @TestInstance(PER_CLASS)가 아닌 경우). 메서드 이름을 잘못 지정하면 No tests found 오류가 발생합니다.

자주 묻는 질문

JUnit 5 파라미터화 테스트란 무엇인가요?

JUnit 5의 @ParameterizedTest 로 하나의 테스트 메서드를 다양한 입력 데이터로 반복 실행합니다. CSV, Enum, Method 소스 등 다양한 데이터 공급 방식을 지원합니다.

JUnit 5 파라미터화 테스트 학습 시 주의할 점은 무엇인가요?

@MethodSource 의 메서드는 반드시 static 이어야 합니다(테스트 클래스가 @TestInstance(PER_CLASS) 가 아닌 경우). 메서드 이름을 잘못 지정하면 No tests found 오류가 발생합니다.