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("반복");
}
테스트 메소드에 RepetitionInfo 객체를 사용하면 반복 횟수에 대한 정보를 얻을 수 있습니다.
class StudyTest {
@DisplayName("스터디 만들기")
@RepeatedTest(5)
void repeatTest(RepetitionInfo repetitionInfo){
System.out.println("반복 "+repetitionInfo.getCurrentRepetition() //현재 반복 횟수
+ "/" +
repetitionInfo.getTotalRepetitions()); //총 반복 횟수
}
}
@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);
}
}
@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
'스프링 > JUnit' 카테고리의 다른 글
[Junit] MockMvc 객체란? (0) | 2021.04.29 |
---|---|
[JUnit] JUnit 5로 자바 단위 테스트 시작하기 (0) | 2021.04.27 |
[JUnit] JUnit5 테스트 이름 표시하기 (0) | 2020.12.14 |
[JUnit] @Tag, 테스트의 태깅과 필터링 (0) | 2020.12.03 |
[JUnit] Assertion, JUnit 5의 단언문 (0) | 2020.12.02 |
댓글