JUnit là một Java testing framework được sử dụng phổ biến trong các dự án Java. JUnit 5 là phiên bản mới nhất của JUnit, nó có một số cải tiến thú vị, với mục tiêu hỗ trợ các tính năng mới từ phiên bản Java 8 trở đi cũng như cho phép nhiều kiểu kiểm thử khác nhau.
Cài đặt JUnit 5 trong dự án Maven
Việc cài đặt JUnit 5 khá đơn giản, chúng ta chỉ cần thêm các dependency của JUnit và file pom.xml
<!-- Only needed to run tests in a version of IntelliJ IDEA that bundles older versions -->
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<version>1.6.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.6.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<version>5.6.0</version>
<scope>test</scope>
</dependency>
Lưu ý: Bạn cần sử dụng phiên bản Java 8 trở lên
Cấu tạo của JUnit 5
Không giống các phiên bản trước của JUnit, JUnit 5 bao gồm một số module khác nhau từ 3 dự án con (sub-projects) khác nhau
JUnit 5 = Junit Platform + JUnit Jupiter + JUnit Vintage
JUnit Platform đóng vai trò là nền tảng khởi chạy các framework kiểm thử trên JVM. Nó cũng xác định API TestEngine để phát triển framework kiểm thử chạy trên platform. Ngoài ra, nền tảng này còn cung cấp Console Launcher để khởi chạy platform từ command line và trình chạy dựa trên JUnit 4 để chạy bất kỳ TestEngine nào trên nền tàng trong môi trường dựa trên JUnit 4.
JUnit Platform cũng tồn tại trong các IDE phổ biến (như IntelliJ IDEA, Eclipse, NetBeans, và VS Code) và các công cụ xây dựng (Như Gradle, Maven, Ant)
JUnit Jupiter là sự kết hợp của mô hình lập trình mới và mô hình mở rộng để viết testcase và phần mở rộng trong JUnit 5. Jupiter sub-project cung cấp một TestEngine để chạy các kiểm thử dựa trên nền tảng này
JUnit Vintage cung cấp TestEngine để chạy cac kiểm thử dựa trên JUnit 3 và JUnit 4
Annotations
JUnit 5 hỗ trợ các annotations sau để viết unit test.
Annotation | Mô tả |
---|---|
@Test | Đặt ở đầu method để thông báo method được sử dụng để kiểm thử (test method) |
@ParameterizedTest | Biểu thị rằng test method có nhiều tham số |
@RepeatedTest | Biểu thị rằng test method là một kiểm thử được lặp nhiều lần |
@TestFactory | Biểu thị rằng test method là một test factory cho các dynamic test |
@TestTemplate | Biểu thị rằng method là một template cho các test case được thiết kế để được gọi nhiều lần |
@TestMethodOrder | Cấu hình thứ tự thực thi cho các annotation @Test, tương tự như annotation @FixMethodOrder trong JUnit 4 |
@TestIntance | Quy định vòng đời của các annotation test class |
@DisplayName | Khai báo tên hiển thị tùy chỉnh cho các test class hoặc test method |
@DisplayNameGeneration | Khai báo tên hiển thị cho các test class được generate |
@BeforeEach | Biểu thị rằng annotated method phải được thực thi trước mỗi method @Test, @RepeatedTest hoặc @TestFactory trong lớp hiện tại, nó tương tự như annotation @Before của JUnit 4 |
@AfterEach | Biểu thị rằng annotated method phải được thực thi sau mỗi method @Test, @RepeatedTest hoặc @ParameterizedTest trong lớp hiện tại, nó tương tự như annotation @After của JUnit 4 |
@BeforeAll | Biểu thị rằng annotated method phải được thực thi trước tất cả method @Test, @RepeatedTest, @TestFactory và @ParameterizedTest trong lớp hiện tại, nó tương tự như annotation @BeforeClass của JUnit 4 |
@AfterAll | Biểu thị rằng annotated method phải được thực thi sau tất cả method @Test, @RepeatedTest, @TestFactory và @ParameterizedTest trong lớp hiện tại, nó tương tự như annotation @AfterClass của JUnit 4 |
@Nested | Biểu thị rằng annotated class là một test class non static lồng nhau. Các method @BeforeAll và @AfterAll không thể được sử dụng trực tiếp trong test class @Nested trừ khi test instance lifecycle được sử dụng |
@Tag | Được sử dụng để khai báo các thẻ filter test, ở cấp độ class hoặc method |
@Disabled | Được sử dụng để vô hiệu hóa một test method hay một test class |
Thực hành với các annotations
Hãy sử dụng các annotation trong JUnit 5 và xem cách sử dụng cũng như hoạt động để hiểu rõ hơn
package vn.techmaster;
import org.junit.jupiter.api.*;
import static org.junit.jupiter.api.Assertions.*;
@DisplayName("JUnit5Example")
class DemoTestTest {
//@BeforeAll dùng để chỉ định test method chạy đầu tiên
//Nó phải được đặt là phương thức tĩnh (static), nếu không chương trình sẽ không biên dịch được
@BeforeAll
static void setup() {
System.out.println("BeforeAll");
}
//@BeforeEach chỉ định 1 method sẽ luôn được thực thi trước mỗi test method thực thi
@BeforeEach
public void beforeEach() {
System.out.println("BeforeEach");
}
//@AfterAll Chỉ định method sẽ được thực thi khi tất cả các test method trong class thực thi xong
//Nó phải được đặt trên static method
@AfterAll
public static void afterAll() {
System.out.println("AfterAll");
}
//@AfterEach Chỉ định 1 method luôn thực thi sau khi 1 test method thực thi xong
@AfterEach
public void afterEach() {
System.out.println("AfterEach");
}
@Test
@DisplayName("My test method")
public void test() {
System.out.println("Test");
}
//disable() method không được thực thi vì bị ngắn chặn bởi @Disabled
@Test
@Disabled
public void disable() {
System.out.println("Disabled");
}
}
Kết quả thực thi:
Phần source code ví dụ trên mình để đây nhé : https://github.com/EriChannel/JUnit-5-Tutorial/tree/main/01-Annotations/Demo
Tham khảo Lộ trình Java Spring Boot Full Stack 7 tháng dành cho người chuyển ngành, chuyển nghề, sinh viên CNTT năm 3,4 muốn học xong đi làm sớm để tích lũy kinh nghiệm.
Liên hệ tư vấn: Ms Mẫn - 0963023185 - manpham@techmaster.vn
Bình luận