Computer >> Máy Tính >  >> Lập trình >> Java

JUnit 5 Chú thích với các ví dụ

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);
    }
}

JUnit 5 Chú thích với các ví dụ

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() {
    }
}