본문 바로가기
스프링/JUnit

[JUnit] JUnit5 테스트를 반복 실행하는 방법(@RepeaedTest, @ParameterizedTest)

by 책 읽는 개발자_테드 2020. 12. 15.
반응형

junit 테스트를 반복 실행하는 방법(@RepeaedTest, @ParameterizedTest)

 

인프런 - 더 자바, 애플리케이션을 테스트하는 다양한 방법 강의를 학습하며 정리한 내용입니다.

www.inflearn.com/course/the-java-application-test

 

( intellij에서 JUnit5의 설정이 완료되었다는 가정하에 글을 작성합니다. )

(때문에 JUnit5 사용방법을 모르시는 분들은 다음글을 참고해 주세요.  scshim.tistory.com/175 )

 

@RepeaedTest

@RepeaedTest 어노테이션을 통해 테스트의 반복 횟수테스트 이름을 설정할 수 있습니다.

 

아래 코드 처럼 어노테이션에 반복한 숫자를 입력합니다.

class StudyTest {

        @DisplayName("스터디 만들기")
        @RepeatedTest(5)
        void repeatTest(){
                System.out.println("반복");
        }

@RepeaedTest 결과

 

테스트 메소드에 RepetitionInfo 객체를 사용하면 반복 횟수에 대한 정보를 얻을 수 있습니다.

class StudyTest {

        @DisplayName("스터디 만들기")
        @RepeatedTest(5)
        void repeatTest(RepetitionInfo repetitionInfo){
                System.out.println("반복 "+repetitionInfo.getCurrentRepetition()  //현재 반복 횟수
                                        + "/" +
                                          repetitionInfo.getTotalRepetitions()); //총 반복 횟수
        }
}

@RepeaedTest 결과2

 

@RepeaedTest 어노테이션에는 앞서 설명한 @RepeaedTest(숫자) 형태 이외에도 다른 입력값을 사용할 수 있습니다.

 

인텔리제이에서 해당 어노테이션에 커서를 올리고 command+p를 입력하면 아래와 같이 확인 할 수 있습니다. 

 

 

여기서 보이는 name 입력값에 {displayName}, {currentRepetition}, {totalRepetitions} 플레이스홀더(placeholder)를 사용할 수 있습니다.

 

각각은 직관적으로 알 수 있듯이 테스트메소드이름, 현재 테스트 반복 수, 전체 테스트 반복 수를 의미합니다.

class StudyTest {

        @DisplayName("스터디 만들기")
        @RepeatedTest(value = 5, name = "{displayName}, {currentRepetition}/{totalRepetitions}")
        void repeatTest(RepetitionInfo repetitionInfo){
                System.out.println("반복 "+repetitionInfo.getCurrentRepetition()  //현재 반복 횟수
                                        + "/" +
                                          repetitionInfo.getTotalRepetitions()); //총 반복 횟수
        }
}

 

 

@ParameterizedTest

@ParameterizedTest 어노테이션을 통해 테스트에 여러 다른 매개변수를 대입해가며 반복 실행할 수 있습니다.

 

아래 코드 처럼 @ParameterizedTest 어노테이션과 함께 @ValueSource 어노테이션에 매개변수로 입력을 원하는 값들을 추가합니다.

class StudyTest {

        @DisplayName("스터디 만들기")
        @ParameterizedTest
        @ValueSource(strings={"James","Joshua","Johnson"})
        void parameterizedTest(String message){
                System.out.println(message);
         }
}

 

위 예제의 문자열 외에도 @ValueSource 어노테이션을 통해 다양한 매개변수를 설정할 수 있습니다.

 

 

@ParameterizedTest 어노테이션도 @RepeaedTest 어노테이션과 같이 플레이스홀더(placeholder)를 통한 테스트 이름 표시가 가능합니다.

class StudyTest {

        @DisplayName("스터디 만들기")
        @ParameterizedTest(name = "{index} {displayName} message={0}")
        @ValueSource(strings={"James","Joshua","Johnson"})
        void parameterizedTest(String message){
                System.out.println(message);
        }
}

d

@ValueSource 어노테이션 외에도 인자 값을 위한 다양한 어노테이션이 존재합니다.

 

@NullSource

인자 값으로 null을 넘겨줍니다.

class StudyTest {

        @DisplayName("스터디 만들기")
        @ParameterizedTest(name = "{index} {displayName} message={0}")
        @NullSource
        void parameterizedTest(String message){
                System.out.println(message);
        }
}

 

@EmptySource

비어있는 문자열을 인자로 넘겨줍니다.

class StudyTest {

        @DisplayName("스터디 만들기")
        @ParameterizedTest(name = "{index} {displayName} message={0}")
        @EmptySource
        void parameterizedTest(String message){
                System.out.println(message);
        }
}

 

 @NullAndEmptySource

인자 값으로 null과 빈 문자열을 각각 넘겨줍니다.

class StudyTest {

        @DisplayName("스터디 만들기")
        @ParameterizedTest(name = "{index} {displayName} message={0}")
        @EmptySource
        void parameterizedTest(String message){
                System.out.println(message);
        }
}

 

@CvsSource

여러 인자를 콤마(,)로 구분하여 테스트 메소드에 넘겨줄 수 있다.

 

이외에도 아래와 같은 어노테이션들이 존재합니다.

 

@CvsSource, @EnumSource @MethodSource, @CsvFileSource, @ArgumentSource

 

반응형

댓글