[Junit 5] Parameterized Tests
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)
);
}
}
[실행 결과]
Leave a comment