Parameterized Tests
@Parameterizeds는 여러 값들을 이용하여, 한번에 단일 테스트를 여러 번 실행할 수 있습니다.
종속성 추가
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.8.1</version>
<scope>test</scope>
</dependency>Int 와 String 테스트: @ValueSource
public class Numbers {
public static boolean isOdd(int number) {
return number % 2 != 0;
}
}number 파라미터에 ValueSource 안에 값들을 할당하면서 여러번 테스트한다.
// 설명: 6개 int 홀수 인지 테스트
@ParameterizedTest
@ValueSource(ints = {1, 3, 5, -3, 15, Integer.MAX_VALUE})
void isOdd_ShouldReturnTrueForOddNumbers(int number) {
assertTrue(Numbers.isOdd(number));
}숫자 말고도 String도 테스트가 가능하다.
주의
위의
@ValueSource로 null 은 넘겨줄 수 없다.@NullSource를 대신 이용하면 된다 (다만, int 같은 primitive 타입에는 적용 불가).비슷하게
@EmptySource도 사용 가능하다. 이 어노테이션은 추가적으로, Collection 타입들이나 Array 들을 위한 빈 값들도 제공해준다.위 두가지를 모두 합친,
@NullAndEmptySource도 있다.
@NullAndEmptySource + @ValueSource 같이 쓰기
Enum 테스트: @EnumSource
@EnumSource 속성 이용하기
@ValueSource, @EnumSource 둘 다 오직 한개의 매개변수를 넘길 때만 사용 가능하다.
다수 값을 넘길때를 살펴보자.
여러 args 테스트: @CsvSource
콤마 말고 다른 delimiter 사용
CSV 파일에서 가져오기
Method 테스트: @MethodSource
좀더 복잡한 args 를 다룰 때는,
메소드 이름 지정을 안하면, 테스트명과 동일한 것을 찾는다.
Full Qualified Name(FQN)을 써도 된다.
커스텀 매개변수 클래스 만들기: @ArgumentsSource, ArgumentsProvider
타입 변환
명시적 Conversion
위에서, Month 의 값들을 가져올때, 클래스를 명시해주었다. 하지만, String 으로 줘도 Junit은 자동으로 conversion 을 해준다.
String 사용시에도 형 변환 가능한 타입들
UUID
Locale
LocalDate, LocalTime, LocalDateTime, Year, Month, etc.
File and Path
URL and URI
Enum subclasses
비명시적 Conversion: @ConvertWith
ArgumentAccessor
매개변수 배열에서 특정 arg 위치에 접근이 가능하다.
이쁘게 출력하기
참고자료
https://www.baeldung.com/parameterized-tests-junit-5
Last updated