Tags:

Phân loại và lọc unit test theo Tag trong JUnit 5

Chạy tất cả các unit test trong dự án là một tính năng cơ bản maven hỗ trợ sẵn, hoặc các IDE như Intellij, Eclipse etc cũng đã hỗ trợ sẵn. Tuy nhiên JUnit 5 còn hỗ trợ chúng ta phân loại các unit test và có thể thực thi từng nhánh riêng biệt. Điều này sẽ rất hữu ích khi giúp giảm thiểu thời gian đáng kể phải chạy các unit test không liên trong quá trình kiểm tra.

@Tag trong JUnit 5

Chúng ta có thể phân loại và lọc các unit test với @Tag trong JUnit 5, nó có thể dùng với cả method và class trong JUnit test.

import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;

@Tag("tagclass")
public class TagExample {

    @Test
    @Tag("tagmethod")
    public void tagTest() {
        System.out.println("tagTest");
    }

    @Test
    public void normalTest() {
        System.out.println("normalTest");
    }
}

Khi chạy các unit test với Tag(tagclass) được đặt ở đầu class thì tất cả các method trong class đều được thực thi, bất kể nó được đánh dấu với một Tag khác. Khi chạy với Tag(tagTest) thì chỉ có tagTest() method được thực thi.

Lọc Unit test theo tag

Chúng ta có thể khởi tạo 1 test suite lọc theo Tag, khi đó test suite này chỉ thực hiện các unit test theo Tag được chỉ định trong test suite.

Lọc unit test bởi maven plugin

Maven Surefire plugin cho phép chúng ta lọc các unit test trong quá trình build, sử dụng <groups>tag</groups> để chỉ định các unit test có tag được chạy.

<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.20.1</version>
    <configuration>
        <groups>UnitTest</groups>
    </configuration>
</plugin>

Sử dụng <excludedGroups>tag</excludedGroups> để loại bỏ các unit test theo tag trong quá trình Maven build.

Lọc unit test bởi IDE

Hầu như các IDE hiện giờ đều hỗ trợ lọc và chạy các unit test theo tag được chỉ định.

Trong Intellij bạn có thể chỉ định 

  • Test kind: Tags
  • Tag expression: your_tag

như hình bên dưới.

JUnit5-Tags-in-IntelliJ

Tóm lược

Lọc và chạy các unit test được chỉ định theo tag sẽ rất hữu ích để hạn chế chạy các unit test không liên quan đến các tính năng mà chúng ta đang phát triển. Hầu hết các IDE hiện nay đều đã hỗ trợ chạy unit theo tag thế nhưng chúng ta không cần quá bận tâm đến sử dụng plugin.

Nguồn tham khảo

https://www.baeldung.com/junit-filtering-tests

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x