unit-test-parameterized은(는) 무엇을 하나요?
JUnit 5의 매개변수화된 테스트 패턴을 제공하며, @ParameterizedTest, @ValueSource, @CsvSource, @MethodSource를 사용하여 데이터 기반 단위 테스트를 생성합니다. 단일 메서드로 여러 입력 값에 대해 동일한 로직을 실행하는 테스트를 만듭니다. 데이터 기반 Java 테스트, 단일 메서드에서 여러 테스트 케이스 또는 경계값 분석에 사용하세요.
사용 방법
다음은 @CsvSource를 사용한 예제입니다:
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import static org.junit.jupiter.api.Assertions.assertEquals;
class CalculatorTest {
@ParameterizedTest
@CsvSource({
"1, 2, 3",
"5, 5, 10",
"-1, 1, 0"
})
void testAdd(int a, int b, int expected) {
Calculator calculator = new Calculator();
assertEquals(expected, calculator.add(a, b));
}
}
@ValueSource를 사용한 예제:
@ParameterizedTest
@ValueSource(strings = { "racecar", "radar", "level" })
void testIsPalindrome(String word) {
assertTrue(PalindromeChecker.isPalindrome(word));
}
@MethodSource를 사용한 예제:
@ParameterizedTest
@MethodSource("provideStringsForIsBlank")
void testIsBlank(String input, boolean expected) {
assertEquals(expected, StringUtils.isBlank(input));
}
static Stream<Arguments> provideStringsForIsBlank() {
return Stream.of(
Arguments.of(null, true),
Arguments.of("", true),
Arguments.of(" ", true),
Arguments.of("not blank", false)
);
}
주요 어노테이션
- @ParameterizedTest: 이 어노테이션을 붙인 메서드는 매개변수화된 테스트가 됩니다.
- @ValueSource: 단일 타입의 배열(예:
strings,ints,longs,doubles)을 제공합니다. - @CsvSource: CSV 문자열 배열을 제공하여 여러 인자를 전달합니다.
- @MethodSource: 별도의 팩토리 메서드를 통해 복잡한 인자 스트림을 제공합니다.
이 스킬을 사용하는 경우
- 동일한 테스트 로직을 여러 입력 값으로 실행해야 할 때
- 경계값 분석(Boundary Value Analysis)을 수행할 때
- 데이터 기반 테스트(Data-Driven Testing)를 작성할 때
- 단일 메서드로 여러 테스트 케이스를 생성하여 코드 중복을 줄이고 싶을 때
지원 플랫폼
- Claude Code
- Cursor
- Codex CLI
- GitHub Copilot
- 그리고 기타 AI 에이전트 도구