JUnit5 테스트 코드 반복 - @RepeatedTest
테스트 코드를 반복하여 실행하는 방법. @RepeatedTest 사용법
반복 테스트
@RepeatedTest
로 메소드를 어노테이션을 지정하면 value 지정된 횟수만큼 테스트가 반복된다.
package com.devkuma.junit5.repeated;
import org.junit.jupiter.api.RepeatedTest;
public class RepeatedMethodTest {
@RepeatedTest(3)
void test() {
System.out.println("test");
}
}
터미널 실행 결과:
test
test
test
IDE 실행 결과:
test() ✔
├─ repetition 1 of 3 ✔
├─ repetition 2 of 3 ✔
└─ repetition 3 of 3 ✔
반복되는 각 테스트의 표시 이름은 repetition <현재 반복 횟수> of <총 반복 횟수>
가 된다.
테스트의 표시되는 이름 지정
@RepeatedTest
에 속성 name
으로 반복 테스트의 표시되는 이름을 지정할 수 있다.
테스트의 표시되는 이름의 지정에서는 전용의 플레이스홀더가 제공되어, 반복의 정보를 표시명에 반영할 수 있다. 플레이스홀더을 종류는 아래와 같다.
displayName
- 테스트 메소드 표시 이름
- 기본값은 테스트 메소드의 이름
@DisplayName
가 지정되면 그 쪽이 사용
currentRepetition
- 현재 반복 횟수
- 값은 1부터 시작
totalRepetitions
- 총 반복 횟수
기본 표시 되면 이름 미리 정의된 표시 이름 패턴이 @RepetedTest
에 제공됨
- 기본 패턴은
{displayName} :: repetition {currentRepetition} of {totalRepetitions}
이다. - LONG_DISPLAY_NAME | JUnit5 Javadoc
package com.devkuma.junit5.repeated;
import org.junit.jupiter.api.RepeatedTest;
public class RepeatedNameTest {
@RepeatedTest(
name = "displayName={displayName}, currentRepetition={currentRepetition}, totalRepetitions={totalRepetitions}",
value = 3
)
void test() {
System.out.println("test");
}
}
터미널 실행 결과:
test
test
test
IDE 실행 결과:
test() ✔
├─ displayName=test(), currentRepetition=1, totalRepetitions=3 ✔
├─ displayName=test(), currentRepetition=2, totalRepetitions=3 ✔
└─ displayName=test(), currentRepetition=3, totalRepetitions=3 ✔
반복 정보를 테스트 메소드에서 받기
@RepeatedTest
로 주석이 달린 테스트 메소드는 현재 반복 정보를 담고 있는 RepetitionInfo 객체를 인수로 수신할 수 있다.
RepetitionInfo
객체 메소드는 2개가 있다.
getCurrentRepetition()
- 현재 반복 횟수를 반환한다.
- 값은 1부터 시작한다.
getTotalRepetitions()
- 총 반복 횟수를 반환한다.
RepetitionInfo
객체는 @BeforeEach
, @AfterEach
에서도 받을 수 있다.
단, @Test
선언한 일반 테스트 메소드가 섞여 있으면, RepetitionInfo
를 해결할 수 없으므로 런타임 오류가 발생한다.
package com.devkuma.junit5.repeated;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.RepeatedTest;
import org.junit.jupiter.api.RepetitionInfo;
public class RepetitionInfoTest {
@BeforeEach
void before(RepetitionInfo repetitionInfo) {
printRepetitionInfo("before", repetitionInfo);
}
@RepeatedTest(3)
void test(RepetitionInfo repetitionInfo) {
printRepetitionInfo(" test", repetitionInfo);
}
@AfterEach
void after(RepetitionInfo repetitionInfo) {
printRepetitionInfo("after", repetitionInfo);
}
private void printRepetitionInfo(String method, RepetitionInfo repetitionInfo) {
int currentRepetition = repetitionInfo.getCurrentRepetition();
int totalRepetitions = repetitionInfo.getTotalRepetitions();
System.out.printf("%s (%d/%d)%n", method, currentRepetition, totalRepetitions);
}
}
터미널 실행 결과:
before (1/3)
- test (1/3)
after (1/3)
before (2/3)
- test (2/3)
after (2/3)
before (3/3)
- test (3/3)
after (3/3)
최종 수정 : 2022-12-11