Tags:

Skip test trong Maven

Việc skip test thông thường không được khuyến khích vì việc chạy test có thể giúp chúng ta tìm ra các lỗ hỏng trong các tính năng mới mà chúng ta vừa triển khai hoặc chỉnh sửa. Tuy nhiên vẫn có một số tình huống mà việc skip test sẽ mang lại một số lợi điểm nhất định.

Ví dụ như chúng ta đang chỉnh sửa một tính năng cũ theo yêu cầu của khách hàng, và chúng ta biết chắc rằng unit-test trước đây sẽ failed vì logic đã thay đổi. Trong tình huống này chúng ta chỉ cần build code để chạy thử, bỏ qua việc thực thi các unit test, điều này sẽ giúp chúng ta tiết kiệm được một khoảng thời gian đáng kể.

Trong bài viết này chúng ta sẽ cùng nhau tìm ra những cách skip test trong các maven project.

Maven Lifecycle

Trước khi chúng ta tìm hiểu về cách skip test trong maven, chúng ta cần hiểu rõ về maven lifecycle để biết khi nào test được compile(biên dịch) hoặc run(thực thi). Trong bài viết Maven goal và phase này mình có giải thích rõ hơn về maven lifecycle. Nhưng nếu đang đọc bài viết này mà bạn vẫn chưa nắm được khái những khái niệm này thì cũng đừng lo, chúng ta chỉ cần biết rằng Maven có thể:

  1. Ignore tests
  2. Compile tests
  3. Run tests

Skip Test với Command Line Flag

Skip Test compile

Gỉa sử mình có một test class như sau

import org.junit.Test;

public class ExampleTest {

    @Test
    public void test() {
        deftblog;
    }
}

Chúng ta có thể thấy đoạn code ở trên hoàn toàn không thể biên dịch được vì nó đang bị sai syntax. Khi chúng ta thực thi lệnh 

mvn package

Có thể chúng ta sẽ gặp lỗi sau:

[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /C:/Users/hai.nguyen/Desktop/skiptest/src/test/java/ExampleTest.java:[7,9] not a statement
[INFO] 1 error
[INFO] -------------------------------------------------------------

Trong thực tế, bạn có thể gặp trường hợp là đang chỉnh sửa code trong một class, interface hay thậm chí là xóa chúng đi, khi đó các unit-test đang sử dụng những class, interface sẽ không còn khả năng biên dịch. Chúng ta có thể bỏ bỏ qua giai đoạn compile mã nguồn test trong trường hợp này với maven.test.skip flag.

mvn -Dmaven.test.skip package

Skip Test Execution

Ở lựa chọn thứ 2 chúng ta có thể compile mã nguồn test nhưng có thể bỏ qua việc thực thi chúng. Việc này sẽ hiệu quả trong trường hợp các class, interface được sử dụng trong các unit-test không bị chỉnh sửa các signature (kiểu trả về, tham số) hoặc bị xóa.

import org.junit.Test;

import static org.junit.Assert.fail;

public class ExampleTest {

    @Test
    public void thisTestFails() {
        fail("This is a failed test case");
    }
}

Bởi vì trong unit-test trên sử dụng mệnh đề fail(), nếu chúng ta thực thi maven package thì quá trình này sẽ xảy ra lỗi

Results :
Failed tests:   thisTestFails(ExampleTest): This is a failed test case
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0

Bây giờ chúng ta vẫn muốn biên dịch mã nguồn bên trong thư mục test nhưng không muốn chạy chúng. Thì chúng ta có thể sử dụng như sau:

mvn -DskipTests package

Maven Configuration

Trong trường hợp chúng ta cần bỏ qua việc biên dịch hoặc chạy các unit-test trong một khoảng thời gian dài , chúng ta có thể làm điều đó bằng cách cấu hình trong pom.xml.

Skip Test Compile

Tương tự như phần trên đã bàn luận, chúng ta có thể tránh việc maven compile test folder với cấu hình sau được đặt trong file pom.xml.

<properties>
    <maven.test.skip>true</maven.test.skip>
</properties>

Lưu ý rằng chúng ta có thể ghi đè giá trị này bằng cách chạy lệnh sau:

mvn -Dmaven.test.skip=false package

Skip Test Execution

Tiếp tục, chúng ta có thể compile test folder nhưng có thể không chạy chúng bằng cách cấu hình maven sử dụng Maven Surefire Plugin:

<properties>
    <tests.skip>true</tests.skip>
</properties>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.22.1</version>
    <configuration>
        <skipTests>${tests.skip}</skipTests>
    </configuration>
</plugin>

Chúng ta cũng có thể ghi đè giá trị này với lệnh sau:

mvn -Dtests.skip=false package

Tóm lược

Skip test là một việc không được khuyến khích trong phát triển ứng dụng, tuy nhiên vẫn có một số trường hợp nó giúp chúng ta tăng tốc độ phát triển ứng dụng nếu sử dụng thích hợp.

Nguồn tham khảo

https://www.baeldung.com/maven-skipping-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