title
[!quote] Definition
@ParameterizedTestis used to signal that the annotated method is a parameterized test method. ^definition
@ArgumentsProvider
[!quote]
@ParameterizedTestmethods must specify at least oneArgumentsProvidervia@ArgumentsSourceor a corresponding composed annotation(e.g.,@ValueSource,@CsvSource, etc.). The provider is responsible for providing aStreamofArgumentsthat will be used to invoke the parameterized test method.
ν΅μμ μΌλ‘ @ArgumentProvider μΈν°νμ΄μ€μ ꡬν체λ₯Ό μ€λΉνκ³ , @ArgumentSource μ΄λ
Έν
μ΄μ
μΌλ‘ ν
μ€νΈ μ€μνΈμ λ§€ννλ κ²μ΄ λ§€κ°λ³μλ₯Ό κ°μ§ ν
μ€νΈμ λ³Έμ§μ΄λ€.
[^arguments-provider]
ArgumentProvider μΈν°νμ΄μ€λ Stream<? extends Arguments> provideArguments(ExtensionContext context) λ©μλλ₯Ό ꡬνν΄μΌ νλλ°, κ·Έλ¬λ €λ©΄
λ°ννμ μ¬μ©λλ Argumentsμ λν΄ μμμΌ νλ€.
[!info]
org.junit.jupiter.params.provider.Argumentsλ λ¨μνObject[]λ₯Ό λ°ννλ κ²μ΄ λͺ©μ μ΄λ€. μ§μ getμ λ§€νλ λλ€λ₯Ό μ λ¬νκ±°λ,of,argumentsκ°μ ν©ν 리 λ©μλλ₯Ό νμ©νλ©΄ λλ€.
[!example]
λ€μμ μΈμμ μ λ¬ λ°©μμ νμΈν μ μλ κ°λ¨ν νμ΅ ν μ€νΈμ΄λ€.
MyArgumentsProviderλ₯Ό ν΅ν΄("a", "b"), ("c", "d")μΌμ΄μ€κ° μ λ¬λλ€.static class MyArgumentsProvider implements ArgumentsProvider { @Override public Stream<Arguments> provideArguments(ExtensionContext context) { return Stream.<Arguments>builder() .add(Arguments.of("a", "b")) .add(() -> List.of("c", "d").toArray()) .build(); } } @ParameterizedTest @ArgumentsSource(MyArgumentsProvider.class) void parameter_withProvider(String s1, String s2) { // 1: s1 = "a", s2 = "b" // 2: s1 = "c", s2 = "d" assertThat(s1).isIn("a", "c"); assertThat(s2).isIn("b", "d"); }
[!example]
νμ²λ¦¬κ° νμνλ€λ©΄
ArgumentConverterλ₯Ό νμ©ν μ μλ€. λ€μμ μ λ¬λ°μ λ¬Έμμ΄μ 첫 λ²μ§Έ λ¬Έμλ₯Ό λλ¬Έμcharλ‘ λ³ννλ μμ μ΄λ€.@ParameterizedTest @ArgumentsSource(MyArgumentsProvider.class) void parameter_withProvider_andConverter( @ConvertWith(ToUpperChar.class) char c1, @ConvertWith(ToUpperChar.class) char c2 ) { // previous test fails // Expecting actual: 'A' to be in: ["a", "c"] // Expecting actual: 'B' to be in: ["b", "d"] // convert String "s" to uppercase char 'S' assertThat(List.of(c1, c2)).satisfiesAnyOf( actual -> assertThat(actual).isEqualTo(List.of('A', 'B')), actual -> assertThat(actual).isEqualTo(List.of('C', 'D'))); } static class ToUpperChar implements ArgumentConverter { @Override public Character convert(Object source, ParameterContext context) throws ArgumentConversionException { char c = String.valueOf(source).charAt(0); return Character.toUpperCase(c); } }
[!caution] IntelliJμ ν μ€νΈ κ²°κ³Όλ₯Ό λνλ΄λ μ€ν λ·°μμλ λ μΌμ΄μ€ λͺ¨λ
ArgumentsSourceκ°μ κΈ°μ€μΌλ‘ μΆλ ₯λλ€.ArgumentConverterλ₯Ό μ¬μ©νλ€λ©΄ μ€μ λ©μλμ μ λ¬λ κ°κ³Ό λ¬λΌμ§ μ μλ€λ μ μ μ μνμ.

