728x90
@RepeatedTest
@RepeatedTest(10)
void repeatTest() {
System.out.println("test");
}
@RepeatedTest(10)을 하면 10번 테스트를 반복할 수 있다.
반복 횟수 가져오기
@RepeatedTest(10)
void repeatTest(RepetitionInfo repetitionInfo) {
System.out.println("test" + repetitionInfo.getCurrentRepetition() + "/"+
repetitionInfo.getTotalRepetitions());
}
RepetitionInfo를 인자로 받아서 횟수를 알 수 있다.
repetitionInfo.getCurrentRepetition() : 현재 몇번째인지
repetitionInfo.getTotalRepetitions() : 총 몇번 반복하는지
반복 마다 테스트 이름 넣기
@DisplayName("테스트 반복")
@RepeatedTest(value = 10, name = "{displayName}, {currentRepetition}/{totalRepetitions}")
void repeatTest(RepetitionInfo repetitionInfo) {
System.out.println("test" + repetitionInfo.getCurrentRepetition() + "/"+
repetitionInfo.getTotalRepetitions());
}
{displayName} 위의 정의한 테스트이름을 가져온다.
반복마다 파라미터 값을 넣기 테스트
@ParameterizedTest
@ValueSource(strings = {"날씨가", "많이", "더워지고", "있네요."})
void parameterizeTest(String message) {
System.out.println(message);
}
파라미터 테스트 이름 정의하기
@DisplayName("테스트 파라미너 넣기")
@ParameterizedTest(name = "{index} {displayName} message={0}")
@ValueSource(strings = {"날씨가", "많이", "더워지고", "있네요."})
void parameterizeTest(String message) {
System.out.println(message);
}
빈문자열, 널 넣기
@DisplayName("테스트 파라미너 넣기")
@ParameterizedTest(name = "{index} {displayName} message={0}")
@ValueSource(strings = {"날씨가", "많이", "더워지고", "있네요."})
@EmptySource
@NullSource
void parameterizeTest(String message) {
System.out.println(message);
}
@DisplayName("테스트 파라미너 넣기")
@ParameterizedTest(name = "{index} {displayName} message={0}")
@ValueSource(strings = {"날씨가", "많이", "더워지고", "있네요."})
@NullAndEmptySource
void parameterizeTest(String message) {
System.out.println(message);
}
@EmptySource : 빈 값을 넣어줌.
@NullSource : 널을 넣어줌.
@NullAndEmptySource : 위의 두개를합쳐 쓸 수 있다.
암묵적인 타입변환
@DisplayName("테스트 파라미너 넣기")
@ParameterizedTest(name = "{index} {displayName} message={0}")
@ValueSource(ints = {10, 20, 40})
void parameterizeTest(@ConvertWith(StudyConvertor.class) Study study) {
System.out.println(study);
}
static class StudyConvertor extends SimpleArgumentConverter {
@Override
protected Object convert(Object source, Class<?> targetType) throws ArgumentConversionException {
assertEquals(Study.class, targetType, "Can only convert to Study");
return new Study(Integer.parseInt(source.toString()));
}
}
SimpleArgumentConverter를 상속받아 구현하면 ValueSource 를 int로 한다음에 파라미터를 Study클래스로 받을수 있다.
SimpleArgumentConverter 하나의 인자만 가능하다.
인자 값 조합
@DisplayName("테스트 파라미너 넣기")
@ParameterizedTest(name = "{index} {displayName} message={0}")
@CsvSource({"10, '자바 스터디'", "20, 스프링"})
void parameterizeTest(ArgumentsAccessor argumentsAccessor) {
Study study = new Study(argumentsAccessor.getInteger(0), argumentsAccessor.getString(1));
System.out.println(study);
}
ArgumentsAccessor 에서 getInteger(0) 첫번째 위치에서 인티저를 가져온다,
ArgumentsAccessor 에서 getString(1) 두 번째 위치에서 스트링을 가져온다,
@DisplayName("테스트 파라미너 넣기")
@ParameterizedTest(name = "{index} {displayName} message={0}")
@CsvSource({"10, '자바 스터디'", "20, 스프링"})
void parameterizeTest(@AggregateWith(StudyAggregator.class) Study study) {
System.out.println(study);
}
static class StudyAggregator implements ArgumentsAggregator {
@Override
public Object aggregateArguments(ArgumentsAccessor accessor, ParameterContext context) throws ArgumentsAggregationException {
return new Study(accessor.getInteger(0), accessor.getString(1));
}
}
ArgumentsAggregator 를 상속받아 만들어준다. ArgumentsAggregator 는 static inner 클래스이거나 public 클래스여야 한다.
728x90
'Spring Boot > JUnit5' 카테고리의 다른 글
[JUnit5] 테스트 순서 (0) | 2022.07.22 |
---|---|
[JUnit5] 테스트 인스턴스 (0) | 2022.07.22 |
[JUnit5] Assumptions (0) | 2022.07.21 |
[JUnit5] Assertion (0) | 2022.07.21 |
[JUnit 5] JUit5 (0) | 2022.07.21 |
댓글