반응형
JUnit 5 총 정리 (더보기 클릭)
더보기
- JUnit 5 (1) - JUnit이란?
- JUnit 5 (2) - 소개, 설정, 기본 메소드 (@Test, @BeforeEach, @AfterEach, @BeforeAll, @AfterAll, @Disabled)
- JUnit 5 (3) - Test Results 테스트명 바꾸기 (@DisplayName, @DisplayNameGeneration, @IndicativeSentencesGeneration)
- JUnit 5 (4) - 태깅, 필터링 테스트 (@Tag)
- JUnit 5 (5) - 반복 테스트하기 (@RepeatedTest, @ParameterizedTest, @ValueSource, @NullSource, @EmptySource, @NullAndEmptySource)
- JUnit 5 (5) - 반복 테스트하기 (@ParameterizedTest, @EnumSource, @MethodSource, @CvsSource) (2)
- JUnit 5 (5) - 반복 테스트하기 (@ParameterizedTest, @CvsFileSource, @ArgumentSource) (3)
- JUnit 5 (6) - 테스트 인스턴스 (@TestInstance)
- JUnit 5 (7) - 테스트 순서 (@TestMethodOrder)
- JUnit 5 (8) - OS, JAVA, JVM, 시스템 환경변수 별 테스트 (@EnabledOnOs, @DisabledOnOs, @EnabledOnJre, @DisabledOnJre, @EnabledOnJreRange, @EnabledIfSystemProperty, @DisabledIfSystemProperty, @EnabledIfEnvironmentVariable, @Disabl..
- JUnit 5 (9) - JUnit 4에서 JUnit 5로 마이그레이션 하는 방법 (JUnit 4 vs JUnit 5)
- JUnit 5 (10) - Assertions, Assumptions
- JUnit 5 (11) - Hamcrest
- JUnit 5 (12) - AssertJ ( + vs Hamcrest, 마이그레이션)
이번 포스팅에서는 @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
JUnit 5 총 정리 (더보기 클릭)
더보기
- JUnit 5 (1) - JUnit이란?
- JUnit 5 (2) - 소개, 설정, 기본 메소드 (@Test, @BeforeEach, @AfterEach, @BeforeAll, @AfterAll, @Disabled)
- JUnit 5 (3) - Test Results 테스트명 바꾸기 (@DisplayName, @DisplayNameGeneration, @IndicativeSentencesGeneration)
- JUnit 5 (4) - 태깅, 필터링 테스트 (@Tag)
- JUnit 5 (5) - 반복 테스트하기 (@RepeatedTest, @ParameterizedTest, @ValueSource, @NullSource, @EmptySource, @NullAndEmptySource)
- JUnit 5 (5) - 반복 테스트하기 (@ParameterizedTest, @EnumSource, @MethodSource, @CvsSource) (2)
- JUnit 5 (5) - 반복 테스트하기 (@ParameterizedTest, @CvsFileSource, @ArgumentSource) (3)
- JUnit 5 (6) - 테스트 인스턴스 (@TestInstance)
- JUnit 5 (7) - 테스트 순서 (@TestMethodOrder)
- JUnit 5 (8) - OS, JAVA, JVM, 시스템 환경변수 별 테스트 (@EnabledOnOs, @DisabledOnOs, @EnabledOnJre, @DisabledOnJre, @EnabledOnJreRange, @EnabledIfSystemProperty, @DisabledIfSystemProperty, @EnabledIfEnvironmentVariable, @Disabl..
- JUnit 5 (9) - JUnit 4에서 JUnit 5로 마이그레이션 하는 방법 (JUnit 4 vs JUnit 5)
- JUnit 5 (10) - Assertions, Assumptions
- JUnit 5 (11) - Hamcrest
- JUnit 5 (12) - AssertJ ( + vs Hamcrest, 마이그레이션)
반응형
댓글