你好啊,我是大阳。
本文咱们将探讨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"; }}