你好啊,我是大阳。

本文咱们将探讨JUnit5的断言性能。

JUnit 5 断言是应用测试的理论后果验证预期后果。所有JUnit Jupiter 断言都是org.junit.jupiter.Assertions类中的静态方法,方便使用。

有异样的断言将抛出一个AssertionFailedError或它的一个子类。

1 assertEquals() 和 assertNotEquals()

Assertions.assertEquals()用于断言期望值和理论值相等。Assertions.assertEquals()有许多针对不同数据类型的重载办法,例如 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()办法用于断言期望值和理论值不相等。与assertEquals()相比,assertNotEquals()不蕴含针对不同数据类型的重载办法,仅承受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() 办法断言预期数组和理论数组相等

它还具备针对不同数据类型的重载办法,例如 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()

它断言预期的和理论的可迭代对象是齐全相等的齐全相等意味着汇合中元素的数量和程序必须雷同,迭代的元素必须相等。

它还具备三个重载办法。

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

它断言预期的字符串列表与理论列表匹配

5 assertNotNull() 和 assertNull()

assertNotNull() 断言理论不为空。相同,assertNull()办法断言理论是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()断言预期和理论的不援用同一个对象。 assertSame() 办法断言预期和理论援用完全相同的对象。两者都有三个重载办法:

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

它们是用于测试长时间运行的工作,如果测试工作破费的工夫超过指定的持续时间,则测试将失败。

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)

示例:

@Testvoid 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执行会引发expectedType异样并返回异样

//重载办法public static <T extends Throwable> T assertThrows(Class<T> expectedType, Executable executable)//示例  @Testvoid 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";    }}