테스트 코드를 짜다 보면 같은 로직의 테스트가 늘어난다.
JUnit에는 이렇게 여러 개의 테스트를 한번에 작성하기 위한 @ParameterizedTest 라는 어노테이션을 제공한다. 기본적인 사용 방법은 @Test 대신 @ParameterizedTest 라는 이 annotation을 추가하는 것을 제외하고는 다른 테스트와 동일하다.
이 때 파라미터로 넘겨줄 값들을 지정해주어야 하는데, 이 역시 어노테이션을 사용해서 테스트에 주입해줄 수 있다.
@DisplayName("덧셈 연산을 수행한다.")
@Test
void additionTest() {
int result = Calculator.calculator(1, "+", 2);
assertThat(result).isEqualTo(3);
}
@DisplayName("뺄셈 연산을 수행한다.")
@Test
void subtractionTest() {
int result = Calculator.calculator(1, "-", 2);
assertThat(result).isEqualTo(-1);
}
method를 인수로 전달해주면 복잡한 인수를 전달할 수 있다.
@DisplayName("덧셈 연산을 수행한다.")
@ParameterizedTest
@MethodSource("formulaAndResult")
void calculateTest(int operand1, String operator, int operand2, int result) {
int calculatorResult = Calculator.calculator(operand1, operator, operand2);
assertThat(calculatorResult).isEqualTo(result);
}
private static Stream<Arguments> formulaAndResult() {
return Stream.of(
arguments(1, "+", 2, 3),
arguments(1, "-", 2, -1),
arguments(4, "*", 2, 8),
arguments(4, "/", 2, 2)
);
}
좋은 정보 얻어갑니다, 감사합니다.