[java] JUnit에서 파라미터화된 테스트 작성하기

JUnit은 파라미터화된 테스트를 작성하는 기능을 제공하여 동일한 테스트 메소드를 여러 번 실행하는 데 용이하게 합니다. 이를 통해 여러 입력값에 대한 테스트를 간편하게 작성하고 결과를 확인할 수 있습니다.

@ParameterizedTest 어노테이션

JUnit 5에서는 @ParameterizedTest 어노테이션을 사용하여 파라미터화된 테스트를 작성합니다. 해당 어노테이션을 테스트 메소드에 적용하고, 인자로 전달되는 값을 나타내는 메소드나 소스를 지정합니다.

@ParameterizedTest
@ValueSource(ints = {1, 2, 3})
void testWithParameter(int param) {
    // 테스트 코드 작성
}

위의 예제에서 @ValueSource는 정수값을 나타내는 소스로, testWithParameter 메소드는 이 값을 이용하여 파라미터화된 테스트를 수행합니다.

인자 소스 활용

인자 소스를 활용하여 여러 종류의 입력값을 테스트할 수 있습니다. JUnit 5는 여러 종류의 인자 소스를 지원합니다. @ValueSource, @CsvSource, @EnumSource, @MethodSource 등의 어노테이션을 사용하여 다양한 형태의 입력값을 테스트할 수 있습니다.

@ParameterizedTest
@EnumSource(value = TimeUnit.class, names = {"NANOSECONDS", "MICROSECONDS"})
void testWithEnumSource(TimeUnit timeUnit) {
    // 테스트 코드 작성
}

위의 예제는 @EnumSource 소스를 사용하여 TimeUnit 열거형의 특정 값들을 테스트하는 방법을 보여줍니다.

@MethodSource 활용

@MethodSource 어노테이션을 사용하여 메소드에서 생성된 인자를 활용할 수도 있습니다. 해당 메소드는 인자를 반환하는 정적 메소드이어야 합니다.

@ParameterizedTest
@MethodSource("stringProvider")
void testWithExplicitLocalMethodSource(String argument) {
    // 테스트 코드 작성
}
static Stream<String> stringProvider() {
    return Stream.of("apple", "banana", "orange");
}

위의 예제는 stringProvider 메소드에서 반환되는 값들을 이용하여 파라미터화된 테스트를 수행합니다.

결론

JUnit의 파라미터화된 테스트 기능을 사용하면 반복적인 테스트 코드 작성을 최소화하고 여러 입력 값에 대한 테스트를 효율적으로 관리할 수 있습니다. @ParameterizedTest 어노테이션과 다양한 인자 소스를 활용하여 테스트 코드의 가독성과 유지보수성을 향상시킬 수 있습니다.

더 많은 정보와 예제는 JUnit 공식 문서를 참고하세요.