JAVA · 테스트
JUnit 5 파라미터화 테스트
JUnit 5의 @ParameterizedTest로 하나의 테스트 메서드를 다양한 입력 데이터로 반복 실행합니다. CSV, Enum, Method 소스 등 다양한 데이터 공급 방식을 지원합니다.
핵심 설명
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 오류가 발생합니다.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.