[JUnit5] 테스트 반복 하기

Junseo Kim·2021년 1월 28일
0

@RepeatedTest(반복횟수)

지정한 횟수만큼 해당 테스트를 반복한다.

@ParameterizedTest

매번 다른 값을 가지고 반복 테스트를 실행하기 위해 사용
매번 다른 값을 넘겨주기 위한 여러 애노테이션이 존재한다.

gradle 의존성

testCompile 'org.junit.jupiter:junit-jupiter-params:5.7.0'

@ValueSource

특정 타입 값들을 인자로 넘겨주는 것. 문자열 말고 다른 타입도 가능하다.

@ParameterizedTest
@ValueSource(strings = {"a", "b", "c"})
void test(string str) {
   System.out.println(str);
}

인자를 특정 타입으로 변환해서 받아오려면 SimpleArgumentConverter를 상속해서 사용할 수 있다.

@ParameterizedTest
@ValueSource(strings = {"a", "b", "c"})
void studyTest(@ConvertWith(StudyConverter.class) Study study) {
    System.out.println(study.getName());
}

static class StudyConverter extends SimpleArgumentConverter {

    @Override
    protected Object convert(Object source, Class<?> targetType) throws ArgumentConversionException {
        return new Study(source.toString());
    }
}

@EmptySource

빈 문자열을 인자로 추가해주는 것

@NullSource

null을 인자로 추가해주는 것

@ParameterizedTest
@ValueSource(strings = {"a", "b", "c"})
@EmptySource
@NullSource
void test(string str) {
   System.out.println(str);
}

@CsvSource

여러 인자를 콤마로 구분해서 넘겨줌.

@ParameterizedTest
@CsvSource({"a, 1", "b, 2", "c, 3"})
void test(string str, Integer number) {
   System.out.println(str + number);
}

여러 인자를 하나의 타입으로 받고 싶을 때는 ArgumentsAggregator를 구현해서 사용한다.

@ParameterizedTest
@CsvSource({"a, 1", "b, 2", "c, 3"})
void studyTest(@AggregateWith(StudyAggregator.class) Study study) {
    System.out.println(study.getName() + " " + study.getNumber());
}

static class StudyAggregator implements ArgumentsAggregator {

    @Override
    public Object aggregateArguments(ArgumentsAccessor accessor, ParameterContext context) throws ArgumentsAggregationException {
        return new Study(accessor.getString(0), accessor.getInteger(1));
    }
}

이때 Aggregator는 static inner class거나 public class여야한다.

0개의 댓글