Assertions.assertIterableEquals() 示例
它断言预期的和实际的可迭代对象是非常相等的。
深度相等意味着集合中元素的数量和顺序必须相同;以及迭代元素必须相等。
它还具有 3 个重载方法。
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)
@Test void testCase() { Iterable<Integer> listOne = new ArrayList<>(Arrays.asList(1,2,3,4)); Iterable<Integer> listTwo = new ArrayList<>(Arrays.asList(1,2,3,4)); Iterable<Integer> listThree = new ArrayList<>(Arrays.asList(1,2,3)); Iterable<Integer> listFour = new ArrayList<>(Arrays.asList(1,2,4,3)); //Test will pass Assertions.assertIterableEquals(listOne, listTwo); //Test will fail Assertions.assertIterableEquals(listOne, listThree); //Test will fail Assertions.assertIterableEquals(listOne, listFour); }
Assertions.assertTimeout() 和 Assertions.assertTimeoutPreemptively() 示例
assertTimeout()
和 assertTimeoutPreemptively()
都用于测试长时间运行的任务。
如果测试用例中的给定任务花费的时间超过指定的持续时间,则测试将失败。
两种方法的唯一区别在于,在 assertTimeoutPreemptively()
中,如果超过超时,Executable
或者 ThrowingSupplier
的执行将被抢先中止。
在 assertTimeout()
的情况下,Executable
或者 ThrowingSupplier
不会被中止。
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() { //This will pass Assertions.assertTimeout(Duration.ofMinutes(1), () -> { return "result"; }); //This will fail Assertions.assertTimeout(Duration.ofMillis(100), () -> { Thread.sleep(200); return "result"; }); //This will fail Assertions.assertTimeoutPreemptively(Duration.ofMillis(100), () -> { Thread.sleep(200); return "result"; }); }
Assertions.assertLinesMatch() 示例
它断言预期的字符串列表与实际列表匹配。
将一个字符串与另一个字符串匹配的逻辑是:
- 检查是否
expected.equals(actual)
- 如果是,继续下一对 - 否则将
expected
视为正则表达式并通过String.matches(String)
检查 - 如果是,则继续下一对 - 否则检查“预期”行是否是快进标记,如果是,则相应地应用
快进实际行并转到 1.
有效的快进标记是以“>>”开头和结尾的字符串,并且至少包含 4 个字符。
快进文字之间的任何字符都将被丢弃。
>>>> >> stacktrace >> >> single line, non Integer.parse()-able comment >>
Assertions.assertArrayEquals() 示例
与 assertEquals()
类似,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)
void testCase() { //Test will pass Assertions.assertArrayEquals(new int[]{1,2,3}, new int[]{1,2,3}, "Array Equal Test"); //Test will fail because element order is different Assertions.assertArrayEquals(new int[]{1,2,3}, new int[]{1,3,2}, "Array Equal Test"); //Test will fail because number of elements are different Assertions.assertArrayEquals(new int[]{1,2,3}, new int[]{1,2,3,4}, "Array Equal Test"); }
Assertions.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"; } }
Assertions.assertTrue() 和 Assertions.assertFalse() 示例
assertTrue()
断言提供的条件为真
或者BooleanSupplier
提供的布尔条件为真。
类似地,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)
@Test void testCase() { boolean trueBool = true; boolean falseBool = false; Assertions.assertTrue(trueBool); Assertions.assertTrue(falseBool, "test execution message"); Assertions.assertTrue(falseBool, AppTest::message); Assertions.assertTrue(AppTest::getResult, AppTest::message); Assertions.assertFalse(falseBool); Assertions.assertFalse(trueBool, "test execution message"); Assertions.assertFalse(trueBool, AppTest::message); Assertions.assertFalse(AppTest::getResult, AppTest::message); } private static String message () { return "Test execution result"; } private static boolean getResult () { return true; }
JUnit 5 断言有助于使用测试用例的实际输出来验证预期输出。
Assertions.assertNotNull() 和 Assertions.assertNull() 示例
assertNotNull()
断言 actual 不是 null 。
类似地,assertNull()
方法断言 actual 是 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)
@Test void testCase() { String nullString = null; String notNullString = "onitroad.com"; //Test will pass Assertions.assertNotNull(notNullString); //Test will fail Assertions.assertNotNull(nullString); //Test will pass Assertions.assertNull(nullString); // Test will fail Assertions.assertNull(notNullString); }
Assertions.assertEquals() 和 Assertions.assertNotEquals() 示例
使用 Assertions.assertEquals()
来断言期望值和实际值相等。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)
void testCase() { //Test will pass Assertions.assertEquals(4, Calculator.add(2, 2)); //Test will fail Assertions.assertEquals(3, Calculator.add(2, 2), "Calculator.add(2, 2) test failed"); //Test will fail Supplier<String> messageSupplier = ()-> "Calculator.add(2, 2) test failed"; 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)
void testCase() { //Test will pass Assertions.assertNotEquals(3, Calculator.add(2, 2)); //Test will fail Assertions.assertNotEquals(4, Calculator.add(2, 2), "Calculator.add(2, 2) test failed"); //Test will fail Supplier<String> messageSupplier = ()-> "Calculator.add(2, 2) test failed"; Assertions.assertNotEquals(4, Calculator.add(2, 2), messageSupplier); }
Assertions.assertNotSame() 和 Assertions.assertSame() 示例
assertNotSame()
断言预期的和实际的不要引用同一个对象。
. 类似地,assertSame()
方法断言预期和实际引用完全相同的对象。
. 两者都有三个重载方法。
public static void assertNotSame(Object actual) public static void assertNotSame(Object actual, String message) public static void assertNotSame(Object actual, Supplier<> messageSupplier) public static void assertSame(Object actual) public static void assertSame(Object actual, String message) public static void assertSame(Object actual, Supplier<String> messageSupplier)
@Test void testCase() { String oroirnalObject = "onitroad.com"; String cloneObject = oroirnalObject; String otherObject = "example.com"; //Test will pass Assertions.assertNotSame(oroirnalObject, otherObject); //Test will fail Assertions.assertNotSame(oroirnalObject, cloneObject); //Test will pass Assertions.assertSame(oroirnalObject, cloneObject); // Test will fail Assertions.assertSame(oroirnalObject, otherObject); }
Assertions.assertThrows() 示例
它断言所提供的 Executable
的执行会抛出 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"); }); }