Junit5單元測試使用詳解

Junit5單元測試使用詳解

常用註解介紹

功能含義
註解 功能
@Test 表示該方法是一個測試方法
@ParameterizedTest 表示該方法是一個參數化測試
@RepeatedTest 表示該方法是一個重複測試的測試模板
@TestInstance 用於配置所標註的測試類的 測試實例生命週期
@DisplayName 爲測試類或測試方法聲明一個自定義的顯示名稱
@BeforeEach 表示使用了該註解的方法應該在當前類中每一個測試方法之前執行
@AfterEach 表示使用了該註解的方法應該在當前類中每一個測試方法之後執行
@BeforeAll 表示使用了該註解的方法應該在當前類中所有測試方法之前執行(只執行一次),並且它必須是 static方法(除非@TestInstance指定生命週期爲Lifecycle.PER_CLASS
@AfterAll 表示使用了該註解的方法應該在當前類中所有測試方法之後執行(只執行一次),並且它必須是 static方法(除非@TestInstance指定生命週期爲Lifecycle.PER_CLASS
@Tag 用於聲明過濾測試的tag標籤,該註解可以用在方法或類上
@Disable 用於禁用(或者說忽略)一個測試類或測試方法
對比Junit4
Junit4 Junit5
@Test @Test
@BeforeClass @BeforeAll
@AfterClass @AfterAll
@Before @BeforeEach
@After @AfterEach
@Ignore @Disabled
@Category @Tag

測試控制流程

Created with Raphaël 2.2.0開始@BeforeAll註解方法@BeforeEach註解方法測試方法@AfterEach註解方法@AfterAll註解方法結束

maven依賴導入

導入依賴:

    <dependencies>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-params</artifactId>
            <version>5.4.0</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

基本測試@Test示例

import org.junit.jupiter.api.*;

@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class TestDemo {

    @BeforeAll
    public void beforeAll(){
        System.out.println("------測試環境搭建完成------");
    }

    @AfterAll
    public void afterAll(){
        System.out.println("------測試環境清理完成------");
    }

    @BeforeEach
    public void beforeEach(){
        System.out.println("------測試前置方法執行------");
    }

    @AfterEach
    public void afterEach(){
        System.out.println("------測試後置方法執行------");
    }

    @Test
    @DisplayName("test 1")
    public void myTest1(){
        System.out.println("------測試方法1執行------");
    }

    @Test
    @DisplayName("test 2")
    public void myTest2() {
        System.out.println("------測試方法2執行------");
    }
}

測試運行結果:
在這裏插入圖片描述


參數化測試@ParameterizedTest示例

@ValueSource單一參數測試
  • 可以指定ints,strings,bytes等各種基本類型參數
  • 只支持單一參數的方法
  • 指定多個參數的含義是執行多次該方法,每次傳入一個參數
    @ParameterizedTest
    @ValueSource(ints = {1,2,3})
    public void valueSourceTest(int i){
        System.out.println("------測試數據:" + i + "------");
    }

執行結果:
在這裏插入圖片描述


@CsvSource多參數測試
  • 支持多個不同類型參數
    @ParameterizedTest
    @CsvSource({"aaa,1","bbb,2"})
    public void csvSourceTest(String s,int i){
        System.out.println("------測試數據:s=" + s + ",i=" + i + "------");
    }

執行結果:
在這裏插入圖片描述

@MethodSource多參數測試
  • 要求在測試類上注@TestInstance(TestInstance.Lifecycle.PER_CLASS)
  • @MethodSource要傳入方法名作參數
    @ParameterizedTest
    @MethodSource("methodSource")
    void methodSourceTest(String s,int i){
        System.out.println("------測試數據:s=" + s + ",i=" + i + "------");
    }

    Stream<Arguments> methodSource() {
        return Stream.of(
                Arguments.of("aaa",1),Arguments.of("bbb",2));
    }

執行結果:
在這裏插入圖片描述

@CsvFileSource文件參數測試
  • 以行爲單位,每一行就是一個測試數據

code:

    @ParameterizedTest
    @CsvFileSource(resources = "/test.csv")
    void csvFileSourceTest(String s,int i){
        System.out.println("------測試數據:s=" + s + ",i=" + i + "------");
    }

test.csv:

aaa,1
bbb,2

執行結果:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章