반응형
이번 포스팅에서는 @ParameterizedTest의 부가 어노테이션 드디어 마지막 2개를 마무리짓겠습니다.
@CvsFileSource
.cvs 파일을 읽어서 테스트할 수 있게 해주는 어노테이션
@CvsSource와 거의 파라미터 값이 비슷합니다.
파라미터명 | 타입 | 설명 |
resources | String[] | .cvs 파일 경로 경로는 resources 폴더로부터 시작 |
files | String[] | .cvs 파일 경로 경로는 프로젝트 폴더로부터 시작 |
encoding | String | 파일 인코딩 값 기본값 : "UTF-8" |
lineSeparator | String | 줄 바꿈 구분자 기본값 : "\n" |
delimiter | char | delimiter를 변경 (char 형) delimiterString 하고 같이 사용 불가 |
delimiterString | String | delimiter를 변경 (String 형) delimiter 와 같이 사용 불가 delimiter, delimiterString 굳이 2개를 둔 이유는 char 형으로 굳이 사용해야 하는 경우가 있어서 그런 거 같습니다. |
numLinesToSkip | int | cvs 파일 라인 스킵 수 * 주로 cvs 컬럼명이 첫째 줄에 있기 때문에 1을 사용 |
emptyValue | String | CVS 데이터 중 빈 값인 경우 대체되는 값 |
nullValues | String[] | CVS 데이터 중 null 값으로 대체할 값 |
예제
테스트를 위해 test/resources 경로에 two-column.csv 파일을 생성합니다.
//two-column.csv
Country, reference
Sweden, 1
Poland, 2
"United States of America", 3
생성한 csv 파일을 읽어보겠습니다. cvs 파일에 "(double quote)는 "로 잘 읽힙니다.
package com.effortguy.junit5.parameterizedTestAnnotation;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvFileSource;
public class CvsFileSourceAnnotation {
@ParameterizedTest
@CsvFileSource(resources = "/two-column.csv", numLinesToSkip = 1)
void testCsvFileSourceResource(String country, int reference) {
}
@ParameterizedTest
@CsvFileSource(files = "src/test/resources/two-column.csv", numLinesToSkip = 1)
void testCsvFileSourceFiles(String country, int reference) {
}
}
결과
@ArgumentSource
다른 어노테이션처럼 정해진 데이터 주입 방법말고 커스텀하게 주입 데이터 값을 정할 수 있는 어노테이션
파라미터명 | 타입 | 설명 |
value | Class<? extends ArgumentsProvider> | 데이터 주입 방법을 정의한 클래스 |
예시
top class 인 경우가 아니라 inner class 인 경우엔 static 꼭 붙혀야합니다.
package com.effortguy.junit5.parameterizedTestAnnotation;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.ArgumentsProvider;
import org.junit.jupiter.params.provider.ArgumentsSource;
import java.util.stream.Stream;
import static org.junit.jupiter.api.Assertions.assertNotNull;
public class ArgumentSourceAnnotation {
@ParameterizedTest
@ArgumentsSource(value = MyArgumentsProvider.class)
void testArgumentSource(String argument) {
assertNotNull(argument);
}
static class MyArgumentsProvider implements ArgumentsProvider {
@Override
public Stream<? extends Arguments> provideArguments(ExtensionContext context) {
return Stream.of("apple", "banana").map(Arguments::of);
}
}
}
결과
이상으로 @ParameterizedTest 어노테이션 정리가 끝났습니다.
활용도가 많이 높진 않지만 어쩌다가 한 번 사용할 수 있을 거 같아 정리해봤습니다.
다음 포스팅엔 테스트 인스턴스 종류와 설정 방법에 관한 @TestInstance 어노테이션을 정리하겠습니다~
읽어주셔서 감사합니다.
참고
https://junit.org/junit5/docs/current/user-guide/#writing-tests-display-name-generator
반응형
댓글