1. 개요
이 빠른 기사에서는 JUnit 5에 도입된 @RepeatedTest 어노테이션 을 살펴보겠습니다 . 여러 번 반복하려는 테스트를 작성할 수 있는 강력한 방법을 제공합니다.
JUnit 5에 대해 자세히 알아보려면 JUnit 5에 대한 기본 및 사용방법(예제)를 설명하는 다른 기사를 확인하세요 .
2. Maven 의존성 및 설정
가장 먼저 주목해야 할 점은 JUnit 5를 실행하려면 Java 8이 필요하다는 것입니다. 그런 다음 Maven 의존성을 살펴보겠습니다.
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.7.0</version>
<scope>test</scope>
</dependency>
이것은 테스트를 작성하기 위해 추가해야 하는 주요 JUnit 5 의존성입니다. 여기 에서 최신 버전의 아티팩트를 확인 하십시오 .
3. 간단한 @RepeatedTest 예제
반복 테스트를 만드는 것은 간단 합니다. 테스트 메서드 위에 @RepeatedTest 어노테이션을 추가하기만 하면 됩니다 .
@RepeatedTest(3)
void repeatedTest(TestInfo testInfo) {
System.out.println("Executing repeated test");
assertEquals(2, Math.addExact(1, 1), "1 + 1 should equal 2");
}
표준 @Test 어노테이션 대신에 단위 테스트에 @RepeatedTest 를 사용하고 있습니다. 위의 테스트는 동일한 테스트를 세 번 작성한 것처럼 세 번 수행됩니다.
테스트 보고서(IDE의 JUnit 탭에 있는 보고서 파일 또는 결과)는 모든 실행을 표시합니다.
repetition 1 of 3(repeatedTest(TestInfo))
repetition 2 of 3(repeatedTest(TestInfo))
repetition 3 of 3(repeatedTest(TestInfo))
4. @RepeatedTest에 대한 수명 주기 지원
@RepeatedTest 의 각 실행은 전체 JUnit 테스트 수명 주기 지원을 갖는 일반 @Test 처럼 작동합니다 . 즉, 각 실행 중에 @BeforeEach 및 @AfterEach 메서드가 호출됩니다. 이를 시연하려면 테스트 클래스에 적절한 메서드를 추가하기만 하면 됩니다.
@BeforeEach
void beforeEachTest() {
System.out.println("Before Each Test");
}
@AfterEach
void afterEachTest() {
System.out.println("After Each Test");
System.out.println("=====================");
}
이전 테스트를 실행하면 결과가 콘솔에 표시됩니다.
Before Each Test
Executing repeated test
After Each Test
=====================
Before Each Test
Executing repeated test
After Each Test
=====================
Before Each Test
Executing repeated test
After Each Test
=====================
보시다시피 @BeforeEach 및 @AfterEach 메서드는 실행할 때마다 호출됩니다 .
5. 테스트 이름 구성
첫 번째 예에서 테스트 보고서의 출력에 식별자가 포함되어 있지 않음을 관찰했습니다. name 속성을 사용하여 추가로 구성할 수 있습니다 .
@RepeatedTest(value = 3, name = RepeatedTest.LONG_DISPLAY_NAME)
void repeatedTestWithLongName() {
System.out.println("Executing repeated test with long name");
assertEquals(2, Math.addExact(1, 1), "1 + 1 should equal 2");
}
이제 출력에는 반복 인덱스와 함께 메서드 이름이 포함됩니다.
repeatedTestWithLongName() :: repetition 1 of 3(repeatedTestWithLongName())
repeatedTestWithLongName() :: repetition 2 of 3(repeatedTestWithLongName())
repeatedTestWithLongName() :: repetition 3 of 3(repeatedTestWithLongName())
또 다른 옵션은 테스트의 짧은 이름을 생성하는 RepeatedTest.SHORT_DISPLAY_NAME 을 사용 하는 것입니다.
repetition 1 of 3(repeatedTestWithShortName())
repetition 2 of 3(repeatedTestWithShortName())
repetition 3 of 3(repeatedTestWithShortName())
그러나 사용자 정의된 이름을 사용해야 하는 경우에는 다음과 같은 가능성이 매우 높습니다.
@RepeatedTest(value = 3, name = "Custom name {currentRepetition}/{totalRepetitions}")
void repeatedTestWithCustomDisplayName(TestInfo testInfo) {
assertEquals(2, Math.addExact(1, 1), "1 + 1 should equal 2");
}
{currentRepetition} 및 {} totalRepetitions가 현재 반복과 반복의 수에 대해 자리한다. 이러한 값은 런타임 시 JUnit에서 자동으로 제공되며 추가 구성이 필요하지 않습니다. 출력은 우리가 예상한 것과 거의 같습니다.
Custom name 1/3(repeatedTestWithCustomDisplayName())
Custom name 2/3(repeatedTestWithCustomDisplayName())
Custom name 3/3(repeatedTestWithCustomDisplayName())
6. RepetitionInfo에 액세스
이름 속성 외에도 JUnit은 테스트 코드의 반복 메타데이터에 대한 액세스도 제공합니다. 이것은 테스트 메소드에 RepetitionInfo 매개변수를 추가하여 달성됩니다 .
@RepeatedTest(3)
void repeatedTestWithRepetitionInfo(RepetitionInfo repetitionInfo) {
System.out.println("Repetition #" + repetitionInfo.getCurrentRepetition());
assertEquals(3, repetitionInfo.getTotalRepetitions());
}
출력에는 각 실행에 대한 현재 반복 인덱스가 포함됩니다.
Repetition #1
Repetition #2
Repetition #3
RepetitionInfo은 에 의해 제공됩니다 RepetitionInfoParameterResolver 만의 맥락에서 볼 수 있습니다 @RepeatedTest.
7. 결론
이 빠른 사용방법(예제)에서는 JUnit에서 제공 하는 @RepeatedTest 어노테이션 을 탐색하고 이를 구성하는 다양한 방법을 배웠습니다.
GitHub에서 이 기사 의 전체 소스 코드 를 확인하는 것을 잊지 마십시오 .