JUnit 5 차세대 JUnit입니다. 목표는 JVM에서 개발자 측 테스트를 위한 최신 기반을 만드는 것입니다. 여기에는 Java 8 이상에 초점을 맞추고 다양한 테스트 스타일을 활성화하는 것이 포함됩니다.
Maven과 Gradle을 모두 사용할 수 있습니다.
Maven을 사용하는 경우 pom.xml
에 다음 종속성을 추가해야 합니다. 파일:
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.3.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.3.1</version>
<scope>test</scope>
</dependency>
</dependencies>
@JUnit 5 주석
Junit 5에서 가장 분명한 변경 사항 중 하나는 테스트 클래스와 메서드가 더 이상 공개될 필요가 없다는 것입니다.
이제 가장 일반적인 JUnit 5 Annotations 목록을 살펴보겠습니다.
@테스트
이 주석은 메소드가 테스트 메소드임을 나타냅니다. 이 주석에는 속성이 없습니다.
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
class JUnit5Test {
@Test
void helloJUnit5() {
assertEquals(10, 5+5);
}
}
@ParameterizedTest
매개변수화된 테스트를 사용하면 다른 인수로 테스트를 여러 번 실행할 수 있습니다. 일반 @Test
처럼 선언됩니다. 메소드를 사용하지만 @ParameterizedTest
대신 주석.
또한 각 호출에 대한 인수를 제공한 다음 테스트 메서드에서 인수를 사용할 소스를 하나 이상 선언해야 합니다.
예를 들어 다음 예제는 @ValueSource
를 사용하는 매개변수화된 테스트를 보여줍니다. String 배열을 인수의 소스로 지정하는 주석.
예:
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import static org.junit.jupiter.api.Assertions.assertTrue;
class JUnit5Test {
@ParameterizedTest
@ValueSource(strings = { "cali", "bali", "dani" })
void endsWithI(String str) {
assertTrue(str.endsWith("i"));
}
}
@RepeatedTest
JUnit 5에는 @RepeatedTest
로 메서드에 주석을 추가하여 지정된 횟수만큼 테스트를 반복할 수 있는 기능이 있습니다. 원하는 총 반복 횟수를 지정합니다.
반복되는 테스트의 각 호출은 일반 @Test
실행처럼 작동합니다. 방법.
이는 Selenium으로 UI를 테스트할 때 특히 유용합니다.
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.RepeatedTest;
import org.junit.jupiter.api.RepetitionInfo;
import org.junit.jupiter.api.TestInfo;
import static org.junit.jupiter.api.Assertions.assertEquals;
class JUnit5Test {
@RepeatedTest(value = 5, name = "{displayName} {currentRepetition}/{totalRepetitions}")
@DisplayName("RepeatingTest")
void customDisplayName(RepetitionInfo repInfo, TestInfo testInfo) {
int i = 3;
System.out.println(testInfo.getDisplayName() +
"-->" + repInfo.getCurrentRepetition()
);
assertEquals(repInfo.getCurrentRepetition(), i);
}
}
테스트 결과에서 알 수 있듯이 i==3
일 때 , 테스트는 통과하고 그렇지 않으면 실패합니다.
@디스플레이 이름
테스트 클래스 및 테스트 메서드는 테스트 실행자와 테스트 보고서에 표시될 사용자 지정 표시 이름을 선언할 수 있습니다.
예:
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInfo;
@DisplayName("DisplayName Demo")
class JUnit5Test {
@Test
@DisplayName("Custom test name")
void testWithDisplayName() {
}
@Test
@DisplayName("Print test name")
void printDisplayName(TestInfo testInfo) {
System.out.println(testInfo.getDisplayName());
}
}
@BeforeEach
@BeforeEach
주석은 JUnit 4의 @Before
와 유사하게 각 테스트 메소드 전에 주석이 달린 메소드가 실행되어야 함을 나타냅니다. .
예:
import org.junit.jupiter.api.*;
class JUnit5Test {
@BeforeEach
void init(TestInfo testInfo) {
String callingTest = testInfo.getTestMethod().get().getName();
System.out.println(callingTest);
}
@Test
void firstTest() {
System.out.println(1);
}
@Test
void secondTest() {
System.out.println(2);
}
}
출력:
firstTest
1
secondTest
2
@AfterEach
이 주석은 JUnit 4의 @After
와 유사하게 각 테스트 메소드 후에 주석이 달린 메소드가 실행되어야 함을 나타냅니다. . 예를 들어 테스트가 각 테스트 후에 속성을 재설정해야 하는 경우 @AfterEach
로 메서드에 주석을 달 수 있습니다. 그 작업을 위해.
import org.junit.jupiter.api.*;
class JUnit5Test {
@Test
void firstTest() {
System.out.println(1);
}
@Test
void secondTest() {
System.out.println(2);
}
@AfterEach
void after(TestInfo testInfo) {
String callingTest = testInfo.getTestMethod().get().getName();
System.out.println(callingTest);
}
}
출력:
1
firstTest
2
secondTest
@BeforeAll
이 주석은 모든 테스트 전에 메서드를 실행합니다. 이것은 JUnit 4의 @BeforeClass
와 유사합니다. . @BeforeAll
주석은 일반적으로 테스트를 위한 다양한 항목을 초기화하는 데 사용됩니다.
예:
import org.junit.jupiter.api.*;
class JUnit5Test {
@BeforeAll
static void init() {
System.out.println("Only run once before all tests");
}
@Test
void firstTest() {
System.out.println(1);
}
@Test
void secondTest() {
System.out.println(2);
}
}
출력:
Only run once before all tests
1
2
@AfterAll
@AfterAll
주석은 모든 테스트가 실행된 후에만 주석이 달린 메서드를 실행하는 데 사용됩니다. 이것은 JUnit 4의 @AfterClass
와 유사합니다. . 이 주석을 사용하여 모든 테스트가 끝날 때 모든 프로세스를 해제하거나 종료합니다.
예:
import org.junit.jupiter.api.*;
class JUnit5Test {
@Test
void firstTest() {
System.out.println(1);
}
@Test
void secondTest() {
System.out.println(2);
}
@AfterAll
static void after() {
System.out.println("Only run once after all tests");
}
}
출력:
1
2
Only run once after all tests
@태그
이 주석을 사용하여 클래스 또는 메서드 수준에서 테스트 필터링을 위한 태그를 선언할 수 있습니다.
@Tag
주석은 선택한 테스트로 테스트 팩을 만들 때 유용합니다.
예:
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
@Tag("smoke")
class JUnit5Test {
@Test
@Tag("login")
void validLoginTest() {
}
@Test
@Tag("search")
void searchTest() {
}
}
@사용 안 함
@Disabled
주석은 클래스 또는 메서드 수준에서 테스트를 비활성화하거나 건너뛰는 데 사용됩니다. 이것은 JUnit 4의 @Ignore
와 유사합니다. .
클래스 수준에서 선언되면 모든 @test
메서드는 건너뜁니다. @Disabled
를 사용할 때 메서드 수준에서는 주석이 달린 메서드만 비활성화됩니다.
예:
@Disabled
테스트 클래스를 비활성화하는 데 사용됨:
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
@Disabled
class DisabledClassDemo {
@Test
void testWillBeSkipped() {
}
}
예:
@Disabled
테스트 방법을 비활성화하는 데 사용되는 주석:
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
class DisabledTestsDemo {
@Disabled
@Test
void testWillBeSkipped() {
}
@Test
void testWillBeExecuted() {
}
}