JUnit 5 là thế hệ tiếp theo của JUnit. Mục tiêu là tạo nền tảng cập nhật cho thử nghiệm phía nhà phát triển trên JVM. Điều này bao gồm việc tập trung vào Java 8 trở lên, cũng như cho phép nhiều kiểu thử nghiệm khác nhau.
Bạn có thể sử dụng cả Maven và Gradle.
Nếu bạn đang sử dụng Maven, bạn cần thêm phần phụ thuộc sau vào pom.xml
của mình tệp:
<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 Annotations
Bạn sẽ nhận thấy rằng trong Junit 5, một trong những thay đổi rõ ràng nhất là các lớp và phương thức thử nghiệm không cần phải công khai nữa.
Bây giờ, hãy xem qua danh sách các Chú thích JUnit 5 phổ biến nhất.
@ Kiểm tra
Chú thích này biểu thị rằng một phương pháp là một phương pháp thử nghiệm. Lưu ý rằng chú thích này không có bất kỳ thuộc tính nào.
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
class JUnit5Test {
@Test
void helloJUnit5() {
assertEquals(10, 5+5);
}
}
@ ParameterizedTest
Các bài kiểm tra tham số hóa giúp bạn có thể chạy một bài kiểm tra nhiều lần với các đối số khác nhau. Chúng được khai báo giống như @Test
thông thường nhưng sử dụng @ParameterizedTest
chú thích thay thế.
Ngoài ra, bạn phải khai báo ít nhất một nguồn sẽ cung cấp các đối số cho mỗi lệnh gọi và sau đó sử dụng các đối số trong phương thức thử nghiệm.
Ví dụ:ví dụ sau minh họa kiểm tra tham số sử dụng @ValueSource
chú thích để chỉ định một mảng Chuỗi làm nguồn đối số.
Ví dụ:
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 có khả năng lặp lại một bài kiểm tra một số lần được chỉ định đơn giản bằng cách chú thích một phương thức với @RepeatedTest
và chỉ định tổng số lần lặp lại mong muốn.
Mỗi lệnh gọi của một bài kiểm tra lặp lại hoạt động giống như việc thực thi một @Test
thông thường phương pháp.
Điều này đặc biệt hữu ích trong thử nghiệm giao diện người dùng với Selenium.
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);
}
}
Như bạn có thể thấy từ kết quả của bài kiểm tra, khi i==3
, bài kiểm tra sẽ vượt qua, nếu không thì nó không thành công.
@ DisplayName
Các lớp thử nghiệm và phương pháp thử nghiệm có thể khai báo tên hiển thị tùy chỉnh sẽ được hiển thị bởi người chạy thử nghiệm và báo cáo thử nghiệm.
Ví dụ:
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
chú thích biểu thị rằng phương thức chú thích phải được thực thi trước mỗi phương pháp thử nghiệm, tương tự như @Before
của JUnit 4 .
Ví dụ:
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);
}
}
Đầu ra:
firstTest
1
secondTest
2
@ AfterEach
Chú thích này biểu thị rằng phương thức được chú thích phải được thực thi sau mỗi phương pháp thử nghiệm, tương tự như @After
của JUnit 4 . Ví dụ:nếu các bài kiểm tra cần đặt lại một thuộc tính sau mỗi lần kiểm tra, chúng tôi có thể chú thích một phương thức bằng @AfterEach
cho nhiệm vụ đó.
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);
}
}
Đầu ra:
1
firstTest
2
secondTest
@ BeforeAll
Chú thích này thực thi một phương thức trước tất cả các thử nghiệm. Điều này tương tự với @BeforeClass
của JUnit 4 . @BeforeAll
chú thích thường được sử dụng để khởi tạo nhiều thứ khác nhau cho các bài kiểm tra.
Ví dụ:
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);
}
}
Đầu ra:
Only run once before all tests
1
2
@ AfterAll
@AfterAll
chú thích được sử dụng để thực thi phương thức chú thích, chỉ sau khi tất cả các thử nghiệm đã được thực hiện. Điều này tương tự với @AfterClass
của JUnit 4 . Chúng tôi sử dụng chú thích này để loại bỏ hoặc chấm dứt tất cả các quy trình khi kết thúc tất cả các thử nghiệm.
Ví dụ:
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");
}
}
Đầu ra:
1
2
Only run once after all tests
Thẻ @
Chúng ta có thể sử dụng chú thích này để khai báo các thẻ cho các bài kiểm tra lọc, ở cấp lớp hoặc cấp phương thức.
@Tag
chú thích hữu ích khi chúng tôi muốn tạo một gói thử nghiệm với các thử nghiệm đã chọn.
Ví dụ:
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
@Disabled
chú thích được sử dụng để tắt hoặc bỏ qua các bài kiểm tra ở cấp độ lớp hoặc phương pháp. Điều này tương tự với @Ignore
của JUnit 4 .
Khi được khai báo ở cấp lớp, tất cả @test
các phương thức bị bỏ qua. Khi chúng tôi sử dụng @Disabled
ở cấp phương thức, chỉ phương thức có chú thích bị vô hiệu hóa.
Ví dụ:
@Disabled
được sử dụng để vô hiệu hóa một lớp thử nghiệm:
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
@Disabled
class DisabledClassDemo {
@Test
void testWillBeSkipped() {
}
}
Ví dụ:
@Disabled
chú thích được sử dụng để tắt phương pháp kiểm tra:
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
class DisabledTestsDemo {
@Disabled
@Test
void testWillBeSkipped() {
}
@Test
void testWillBeExecuted() {
}
}