PHpullh
학습 라이브러리/Kotlin/파라미터화 테스트 (Parameterized Test)

KOTLIN · 테스트

파라미터화 테스트 (Parameterized Test)

동일한 테스트 로직을 다양한 입력 데이터로 반복 실행합니다. 엣지 케이스를 체계적으로 검증합니다.

테스트중급parameterizeddata-driventest-caseedge-case

핵심 설명

동일한 테스트 로직을 다양한 입력 데이터로 반복 실행합니다. 엣지 케이스를 체계적으로 검증합니다.

Kotlin code

// 테스트 대상
fun fizzBuzz(n: Int): String = when {
    n % 15 == 0 -> "FizzBuzz"
    n % 3 == 0 -> "Fizz"
    n % 5 == 0 -> "Buzz"
    else -> n.toString()
}

// 파라미터화 테스트 유틸
data class TestCase<I, O>(val input: I, val expected: O, val desc: String = "")

fun <I, O> parameterizedTest(
    name: String,
    cases: List<TestCase<I, O>>,
    test: (I) -> O
) {
    println("=== $name ===")
    var passed = 0; var failed = 0
    cases.forEach { (input, expected, desc) ->
        val actual = test(input)
        if (actual == expected) {
            passed++
        } else {
            failed++
            println("  ✗ $desc: 입력=$input, 기대=$expected, 실제=$actual")
        }
    }
    println("  결과: $passed 통과, $failed 실패
")
}

fun main() {
    parameterizedTest("FizzBuzz", listOf(
        TestCase(1, "1", "일반 숫자"),
        TestCase(3, "Fizz", "3의 배수"),
        TestCase(5, "Buzz", "5의 배수"),
        TestCase(15, "FizzBuzz", "15의 배수"),
        TestCase(30, "FizzBuzz", "30"),
        TestCase(7, "7", "소수"),
    )) { fizzBuzz(it) }

    // 문자열 변환 테스트
    parameterizedTest("trim + uppercase", listOf(
        TestCase("  hello  ", "HELLO"),
        TestCase("kotlin", "KOTLIN"),
        TestCase("  ", ""),
        TestCase("ABC", "ABC"),
    )) { it.trim().uppercase() }
}

학습 팁

JUnit5의 @ParameterizedTest@CsvSource를 사용하면 IDE에서 각 케이스를 개별 테스트로 표시합니다.

주의할 점

파라미터화 테스트에 너무 많은 케이스를 넣으면 실패 원인 추적이 어렵습니다. 관련 있는 케이스끼리 그룹화하세요.

자주 묻는 질문

파라미터화 테스트 (Parameterized Test)란 무엇인가요?

동일한 테스트 로직을 다양한 입력 데이터로 반복 실행합니다. 엣지 케이스를 체계적으로 검증합니다.

파라미터화 테스트 (Parameterized Test) 학습 시 주의할 점은 무엇인가요?

파라미터화 테스트에 너무 많은 케이스를 넣으면 실패 원인 추적이 어렵습니다. 관련 있는 케이스끼리 그룹화하세요.