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