JUnit5:斷言機制


簡介

斷言(assertions)是測試方法中的核心部分,用來對測試需要滿足的條件進行驗證。這些斷言方法都是 org.junit.jupiter.api.Assertions 的靜態方法。JUnit 5 內置的斷言可以分成如下幾個類別:

檢查業務邏輯返回的數據是否合理。

所有的測試運行結束以后,會有一個詳細的測試報告;

簡單斷言

用來對單個值進行簡單的驗證。如:

方法 說明
assertEquals 判斷兩個對象或兩個原始類型是否相等
assertNotEquals 判斷兩個對象或兩個原始類型是否不相等
assertSame 判斷兩個對象引用是否指向同一個對象
assertNotSame 判斷兩個對象引用是否指向不同的對象
assertTrue 判斷給定的布爾值是否為 true
assertFalse 判斷給定的布爾值是否為 false
assertNull 判斷給定的對象引用是否為 null
assertNotNull 判斷給定的對象引用是否不為 null

測試:前面斷言失敗,后面不會繼續執行

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

import static org.junit.jupiter.api.Assertions.*;

public class AssertTest {
    @Test
    @DisplayName("simple assertion")
    public void simple() {
        assertEquals(3, 1 + 2, "simple math");
        assertNotEquals(3, 1 + 1);

        assertNotSame(new Object(), new Object());
        Object obj = new Object();
        assertSame(obj, obj);

        assertFalse(1 > 2);
        assertTrue(1 < 2);

        assertNull(null);
        assertNotNull(new Object());
    }
}

數組斷言

    @Test
    @DisplayName("array assertion")
    public void array() {
        assertArrayEquals(new int[]{1, 2}, new int[] {1, 2});
    }

組合斷言

assertAll 方法接受多個 org.junit.jupiter.api.Executable 函數式接口的實例作為要驗證的斷言,可以通過 lambda 表達式很容易的提供這些斷言

@Test
@DisplayName("assert all")
public void all() {
 assertAll("Math",
    () -> assertEquals(2, 1 + 1),
    () -> assertTrue(1 > 0)
 );
}

異常斷言

在JUnit4時期,想要測試方法的異常情況時,需要用@Rule注解的ExpectedException變量還是比較麻煩的。而JUnit5提供了一種新的斷言方式Assertions.assertThrows() ,配合函數式編程就可以進行使用。

    @Test
    @DisplayName("異常測試")
    public void exceptionTest() {
        ArithmeticException exception = assertThrows(
                //扔出斷言異常
                ArithmeticException.class, () -> System.out.println(1 % 0));
    }

超時斷言

斷定業務一定在指定時間內完成,否則失敗

    @Test
    @DisplayName("超時測試")
    public void timeoutTest() {
        //如果測試方法時間超過1s將會異常
        assertTimeout(Duration.ofMillis(1000), () -> Thread.sleep(500));
    }

快速失敗

@Test
@DisplayName("fail")
public void shouldFail() {
 	fail("This should fail");
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM