JUnit5 Params API

@ParameterizedTest
@ValueSource, @NullAndEmptySource, @MethodSource, @CsvFileSource, @EnumSource
@ConvertWith, @AggregateWith

class ParamTest {

    // 매개변수들을 전달할 수 있는 테스트다
    @ParameterizedTest(name = "[{index}] = {arguments} {displayName}")
    // 3번의 테스트를 실행한다
    @ValueSource(strings = {"파란", "하늘", "꿈"})
    // null값과 비어있는 데이터를 추가한다. 2번의 테스트를 실행한다
    @NullAndEmptySource
    // source에서 선언된 데이터가 순서대로 매개변수에 대입된다
    void parameterized_test(String value) {
        System.out.println(value);
    }

    @ParameterizedTest
    @ValueSource(ints = {1, 2, 3, 4, 5})
    // @ConvertWith를 통해 주어진 source를 다른 객체로 변환할 수 있다
    void simple_argument_converter_test(@ConvertWith(StudyArgumentConverter.class) Study study) {
        System.out.println(study);
    }

    // 하나의 매개변수만 주어질때 사용할 수 있다
    static class StudyArgumentConverter extends SimpleArgumentConverter{
        @Override
        protected Object convert(Object source, Class<?> targetType) throws ArgumentConversionException {
            assertEquals(targetType, Study.class, "Can only convert Study");
            return new Study((Integer) source);
        }
    }

    @ParameterizedTest
    @CsvSource(value={"1, '스프링 스터디'", "2, '자바 스터디'"})
    // 두개 이상의 매개변수를 변환할 때는 @AggregateWith를 사용한다.
    void parameterized_test(@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));
        }
    }

    @ParameterizedTest
    @MethodSource("provideStudy")
    void method_source_test(Study study) {
        System.out.println(study);
    }

    static Stream<Arguments> provideStudy(){
        return Stream.of(
                Arguments.of(new Study(1, "스프링 스터디")),
                Arguments.of(new Study(2, "자바 스터디"))
        );
    }

    @ParameterizedTest
    @CsvFileSource(resources = "/csv-file-source-test.csv")
    void csv_file_source_test(@AggregateWith(StudyAggregator.class) Study study) {
        System.out.println(study);
    }

    @ParameterizedTest
    @EnumSource(StudyStatus.class)
    void enum_source_test(StudyStatus status) {
        System.out.println(status);
    }
}

예제는 이곳 에서 확인하실수 있습니다.