JUnit5 파라미터화 테스트 - @ParameterizedTest

하나의 테스트 메서드로 여러 개의 파라미터를 넣는 방법 소개

개요

@ParameterizedTest를 사용하면 하나의 테스트 메서드로 여러 개의 파라미터에 대해서 테스트할 수 있다.

의존성 추가

@ParameterizedTest를 사용하려면, junit-jupiter-params 라이브러리가 필요하다.

dependencies {
    //... 중간 생략 ...

    testImplementation 'org.junit.jupiter:junit-jupiter-params:5.8.1'

    //... 중간 생략 ...
}

@ValueSource

@ValueSource는 리터럴 값의 단일 배열을 지정할 수 있으며, 매개 변수화 된 테스트 호출마다 단일 인수를 제공하는 경우만 사용할 수 있다.

package com.devkuma.junit;

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;

public class ParameterizedMethod {

    @ParameterizedTest
    @ValueSource(ints = { 1, 2 })
    void testValues(int number) {
        System.out.println("@ParameterizedTest executed with number " + number);
    }
}

실행 결과:

@ParameterizedTest executed with number 1
@ParameterizedTest executed with number 2

Null and Empty Sources

@NullSource, @EmptySource

@NullSource, @EmptySource는 매개변수에 null과 empty를 각각 넣어준다. 그리고, 추가로 @ValueSource를 같이 사용할 수도 있다.

@ParameterizedTest
@NullSource
@EmptySource
@ValueSource(strings = { " ", "   ", "\t", "\n" })
void nullEmptyStrings(String text) {
    assertTrue(text == null || text.trim().isEmpty());
}

실행 결과:

nullEmptyStrings(String) ✔
├─ [1] null ✔
├─ [2] ✔
├─ [3] ✔
├─ [4] ✔
├─ [5] ✔
└─ [6] ✔

@NullAndEmptySource

@NullAndEmptySource@NullSource@EmptySource 같이 사용되는 경우에 사용된다. 그리고, 여기서 추가로 @ValueSource를 같이 사용할 수도 있다.

@ParameterizedTest
@NullAndEmptySource
@ValueSource(strings = { " ", "   ", "\t", "\n" })
void nullAndEmptyStrings(String str) {
    assertTrue(str == null || str.trim().isEmpty());
}

실행 결과:

nullAndEmptyStrings(String) ✔
├─ [1] null ✔
├─ [2] ✔
├─ [3] ✔
├─ [4] ✔
├─ [5] ✔
└─ [6] ✔

@EnumSource

@EnumSource는 열거형 매개변수를 이용하여 값을 전달할 경우에 사용된다.

@ParameterizedTest
@EnumSource(value = TimeUnit.class, names = { "DAYS", "HOURS" })
void testEnumSources(TimeUnit timeUnit) {
    assertTrue(EnumSet.of(TimeUnit.DAYS, TimeUnit.HOURS).contains(timeUnit));
}
testEnumSources(String) ✔
├─ [1] HOURS ✔
└─ [2] DAYS ✔

@MethodSource

@MethodSource는 메소드를 이용하여 매개 변수를 전달할 경우에 사용된다.

private static Stream provideBooleanValues() {
    return Stream.of(
            Arguments.of(true, true),
            Arguments.of(true, false),
            Arguments.of(false, true),
            Arguments.of(false, false)
    );
}

@ParameterizedTest
@MethodSource("provideBooleanValues")
void testBooleanValues(boolean expectedBool, boolean actualBool) {
    assertEquals(expectedBool, actualBool);
}

실행 결과:

testBooleanValues(boolean, boolean) X
├─ [1] ✔
├─ [2] X
├─ [3] X
└─ [4] ✔

참조




최종 수정 : 2024-04-14