Guide to JUnit 5 Parameterized Tests
참고 링크
1. 첫인상
기존에 유틸리티 함수가 있다고 생각하고, 해당 함수 동작에 대한 확신을 가지고 싶다.
public class Numbers {
public static boolean isOdd(int number) {
return number % 2 != 0;
}
}매개변수화 된 테스트는 다른 테스트와 유사하지만,
@ParameterizedTest어노테이션을 추가한다.아래 테스트는 결과적으로
@ValueSource배열에서 각각의 값을isOdd_ShouldReturnTrueForOddNumbers매개변수(number) 값으로 사용해 해당 테스트를 6번 실행한다.
@ParameterizedTest
@ValueSource(ints = {1, 3, 5, -3, 15, Integer.MAX_VALUE}) // six numbers
void isOdd_ShouldReturnTrueForOddNumbers(int number) {
assertTrue(Numbers.isOdd(number));
}2. 테스트 케이스
지금까지 알고 있었겠지만 매개변수화 된 테스트는 서로 다른 인수를 사용하여 동일한 테스트를 여러 번 실행한다.
Primitive type
@ValueSource를 사용하면 기본형 타입 값 배열을 테스트 메서드에 전달할 수 있습니다.우리가 간단한
isBlank메서드를 테스트할 것이라고 가정해 보자.
제약사항
제약사항 중 하나는
@ValueSource는 기본형 타입의 값만을 제공한다.shortbyteintlongfloatdoublecharjava.lang.Stringjava.lang.Class
또한 테스트 메서드 하나에 하나의 타입 종류만 사용할 수 있다.
마지막으로
@ValueSource를 통해서null을 전달할 수 없다.
Null, Empty Value
JUnit 5.4부터
@NullSource를 사용하여 매개변수화된 테스트 메서드에 단일null값을 전달할 수 있다.
기본형 타입을 매개변수로 받는 케이스는
@NullSource를 사용할 수 없다.때문에, 매우 유사한 방식으로 동작하는
@EmptySource를 사용하여 빈 값을 전달할 수 있다.
null값과 빈 값 모두를 전달하기 위해서는@NullAndEmptySource를 사용할 수 있다.
Enum
예를 들어서, 모든 월 숫자가 1~12 임을 확인할 수 있다.
또한
names속성을 사용해 필터링을 할 수 있다.
...
Last updated