Updated:

1. 개요

Parameterized Tests를 통해 하나의 테스트에 여러 개의 파라미터를 넣어 반복 실행할 수 있다. 이번에는 Junit 5의 Parameterezed Tests 방법에 대해 알아보도록 하자.

2. 개발 환경

  • Java 11

  • Spring Boot 2.5.3

  • Junit 5

3. Single Parameter Test

@ValueSource를 이용하여 리터럴 값의 배열을 테스트 메서드에 전달

short, byte, int, long, float, double, char, ...

3-1. 테스트 대상

[Calculator.java]

1
2
3
4
5
6
public class Calculator {

    public double ret(double number) {
        return number;
    }
}

3-2. 테스트

[소스 코드]

1
2
3
4
5
6
7
8
9
10
11
12
13
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;

import static org.assertj.core.api.Assertions.assertThat;

class CalculatorTest {

    @ParameterizedTest
    @ValueSource(doubles = {1, 2, 3})
    void ret(double number) {
        assertThat(number < 10).isTrue();
    }
}

[실행 결과]

4. Multi Parameter Test

@CsvSource, @MethodSource를 이용하여 여러 개의 파라미터를 묶어서 전달

4-1. 테스트 대상

[Calculator.java]

1
2
3
4
5
6
public class Calculator {

    public double add(double number1, double number2) {
        return number1 + number2;
    }
}

4-2. 테스트

4-2-1. @CsvSource 이용

[소스 코드]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;

import static org.junit.jupiter.api.Assertions.assertEquals;

class CalculatorTest {

    @ParameterizedTest
    @CsvSource({"2, 1, 1", "3, 2, 1", "4, 3, 1"})
    void sum(double expected, double valueOne, double valueTwo) {
        Calculator calc = new Calculator();
        assertEquals(expected, calc.add(valueOne, valueTwo), 0);
    }
}

[실행 결과]

4-2-2. @MethodSource 이용

[소스 코드]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;

import java.util.stream.Stream;

import static org.junit.jupiter.api.Assertions.assertEquals;

class CalculatorTest {

    @ParameterizedTest
    @MethodSource("provideDoubles")
    void sum(double expected, double valueOne, double valueTwo) {
        Calculator calc = new Calculator();
        assertEquals(expected, calc.add(valueOne, valueTwo), 0);
    }

    private static Stream<Arguments> provideDoubles() {
        return Stream.of(
                Arguments.of(2, 1, 1),
                Arguments.of(3, 2, 1),
                Arguments.of(4, 3, 1)
        );
    }
}

[실행 결과]

Updated:

Leave a comment