JUnit5教程(3):_JUnit5斷言

你好啊,我是大陽。

本文我們將討論JUnit5的斷言功能。

JUnit 5 斷言是使用測試的實(shí)際結(jié)果驗證預(yù)期結(jié)果。所有JUnit Jupiter 斷言都是org.junit.jupiter.Assertions類中的靜態(tài)方法,方便使用。

有異常的斷言將拋出一個AssertionFailedError或它的一個子類。

1 assertEquals() 和 assertNotEquals()

Assertions.assertEquals()用于斷言期望值和實(shí)際值相等。Assertions.assertEquals()有許多針對不同數(shù)據(jù)類型的重載方法,例如 int、short、float、char 等。它還支持在測試失敗時傳遞要打印的錯誤消息。例如:

public static void assertEquals(int expected, int actual)
public static void assertEquals(int expected, int actual, String message)
public static void assertEquals(int expected, int actual, Supplier<String> messageSupplier)

示例:

package cn.dayangshuo.junit5.tests;
import cn.dayangshuo.junit5.Calculator;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import java.util.function.Supplier;
/**
 * @author DAYANG
 */
public class CalculatorTests {
    @Test
    @DisplayName("a + b = c")
    void addsTwoNumbers() {
        //測試通過
        Assertions.assertEquals(4, Calculator.add(2, 2));
        //測試失敗
        Assertions.assertEquals(3, Calculator.add(2, 2), "Calculator.add(2, 2) 測試失敗");
        //測試失敗
        Supplier<String> messageSupplier  = () -> "Calculator.add(2, 2) 測試失敗";
        Assertions.assertEquals(3, Calculator.add(2, 2), messageSupplier);
    }
}

相反,Assertions.assertNotEquals()方法用于斷言期望值和實(shí)際值不相等。與assertEquals()相比,assertNotEquals()不包含針對不同數(shù)據(jù)類型的重載方法,僅接受Object:

public static void assertNotEquals(Object expected, Object actual)
public static void assertNotEquals(Object expected, Object actual, String message)
public static void assertNotEquals(Object expected, Object actual, Supplier<String> messageSupplier)

示例:

@Test
@DisplayName("a + b = c")
void test() {
  //測試通過
  Assertions.assertNotEquals(3, Calculator.add(2, 2));
  //測試失敗
  Assertions.assertNotEquals(4, Calculator.add(2, 2), "Calculator.add(2, 2) test failed");
  //測試失敗
  Supplier<String> messageSupplier = () -> "Calculator.add(2, 2) test failed";
  Assertions.assertNotEquals(4, Calculator.add(2, 2), messageSupplier);
}

2 assertArrayEquals()

assertArrayEquals() 方法斷言預(yù)期數(shù)組和實(shí)際數(shù)組相等。

它還具有針對不同數(shù)據(jù)類型的重載方法,例如 boolean[]、char[]、int[] 等,還支持在測試失敗時傳遞要打印的錯誤消息。例如

public static void assertArrayEquals(int[] expected, int[] actual)
public static void assertArrayEquals(int[] expected, int[] actual, String message)
public static void assertArrayEquals(int[] expected, int[] actual, Supplier<String> messageSupplier)

3 assertIterableEquals()

它斷言預(yù)期的和實(shí)際的可迭代對象是完全相等的。完全相等意味著集合中元素的數(shù)量和順序必須相同,迭代的元素必須相等。

它還具有三個重載方法。

public static void assertIterableEquals(Iterable<?> expected, Iterable> actual)
public static void assertIterableEquals(Iterable<?> expected, Iterable> actual, String message)
public static void assertIterableEquals(Iterable<?> expected, Iterable> actual, Supplier<String> messageSupplier)

4 assertLinesMatch()

它斷言預(yù)期的字符串列表與實(shí)際列表匹配

5 assertNotNull() 和 assertNull()

assertNotNull() 斷言實(shí)際不為空。相反,assertNull()方法斷言實(shí)際是null。兩者都有三個重載方法:

public static void assertNotNull(Object actual)
public static void assertNotNull(Object actual, String message)
public static void assertNotNull(Object actual, Supplier<String> messageSupplier)

public static void assertEquals(Object actual)
public static void assertEquals(Object actual, String message)
public static void assertEquals(Object actual, Supplier<String> messageSupplier)

6 assertNotSame() 和 assertSame()

assertNotSame()斷言預(yù)期和實(shí)際的不引用同一個對象。 assertSame() 方法斷言預(yù)期和實(shí)際引用完全相同的對象。兩者都有三個重載方法:

public static void assertNotSame(Object expected, Object actual)
public static void assertNotSame(Object expected, Object actual, String message)
public static void assertNotSame(Object expected, Object actual, Supplier<> messageSupplier)

public static void assertSame(Object expected, Object actual)
public static void assertSame(Object expected, Object actual, String message)
public static void assertSame(Object expected, Object actual, Supplier<String> messageSupplier)

7 assertTimeout()

它們是用于測試長時間運(yùn)行的任務(wù),如果測試任務(wù)花費(fèi)的時間超過指定的持續(xù)時間,則測試將失敗。

public static void assertTimeout(Duration timeout, Executable executable)
public static void assertTimeout(Duration timeout, Executable executable, String message)
public static void assertTimeout(Duration timeout, Executable executable, Supplier<String> messageSupplier)
public static void assertTimeout(Duration timeout, ThrowingSupplier<T> supplier, String message)
public static void assertTimeout(Duration timeout, ThrowingSupplier<T> supplier, Supplier<String> messageSupplier)

示例:

@Test
void testCase() {
  Assertions.assertTimeout(Duration.ofMinutes(1), () -> {
    return "result";
  });
  Assertions.assertTimeout(Duration.ofMillis(100), () -> {
    Thread.sleep(200);
    return "result";
  });
  Assertions.assertTimeoutPreemptively(Duration.ofMillis(100), () -> {
    Thread.sleep(200);
    return "result";
  });
}

8 assertTrue() and assertFalse()

assertTrue()斷言提供的條件為真。相反,assertFalse()斷言提供的條件為false**。

兩者都有以下重載方法:

public static void assertTrue(boolean condition)
public static void assertTrue(boolean condition, String message)
public static void assertTrue(boolean condition, Supplier<String> messageSupplier)
public static void assertTrue(BooleanSupplier booleanSupplier)
public static void assertTrue(BooleanSupplier booleanSupplier, String message)
public static void assertTrue(BooleanSupplier booleanSupplier, Supplier<String> messageSupplier)

public static void assertFalse(boolean condition)
public static void assertFalse(boolean condition, String message)
public static void assertFalse(boolean condition, Supplier<String> messageSupplier)
public static void assertFalse(BooleanSupplier booleanSupplier)
public static void assertFalse(BooleanSupplier booleanSupplier, String message)
public static void assertFalse(BooleanSupplier booleanSupplier, Supplier<String> messageSupplier)

9 assertThrows()

assetThrows()斷言提供的Executable執(zhí)行會引發(fā)expectedType異常并返回異常

//重載方法
public static <T extends Throwable> T assertThrows(Class<T> expectedType, Executable executable)
//示例  
@Test
void testCase() {
    Throwable exception = Assertions.assertThrows(IllegalArgumentException.class, () -> {
        throw new IllegalArgumentException("error message");
    });
}

10 fail()

fail()方法指未通過測試。它具有以下重載方法:

public static void fail(String message)
public static void fail(Throwable cause)
public static void fail(String message, Throwable cause)
public static void fail(Supplier<String> messageSupplier)
public class AppTest {
    @Test
    void testCase() {
        Assertions.fail("not found good reason to pass");
        Assertions.fail(AppTest::message);
    }

    private static String message () {
        return "not found good reason to pass";
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容