行业资讯 2025年08月6日
0 收藏 0 点赞 142 浏览 8493 个字
摘要 :

文章目录 1.对象相等断言 – assertEquals() 和 assertNotEquals() 2.数组相等断言 – assertArrayEquals() 3. 可迭代对象相等断言 – assertIterableEq……




  • 1.对象相等断言 – assertEquals() 和 assertNotEquals()
  • 2.数组相等断言 – assertArrayEquals()
  • 3. 可迭代对象相等断言 – assertIterableEquals()
  • 4.断言字符串行 – assertLinesMatch()
  • 5.断言空值 – assertNotNull() 和 assertNull()
  • 6.断言对象引用 – assertNotSame() 和 assertSame()
  • 7.断言超时 – assertTimeout() 和 assertTimeoutPreemptively()
  • 8.断言布尔值 – assertTrue() 和 assertFalse()
  • 9.断言错误 – assertThrows()
  • 10.断言测试失败 – fail()

JUnit 5 断言有助于验证测试的预期输出与实际输出是否一致。为简化说明,所有 JUnit Jupiter 断言都是 org.junit.jupiter.Assertions 类中的静态方法。

失败的断言将抛出 AssertionFailedError 或其子类。

1.对象相等断言 – assertEquals() 和 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 test()
{
    //测试通过
    Assertions.assertEquals(4, Calculator.add(2, 2));
    //测试失败
    Assertions.assertEquals(3, Calculator.add(2, 2), \"Calculator.add(2, 2) test failed\");
    //测试失败
    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 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)
//示例
void testCase()
{
    //测试通过
    Assertions.assertArrayEquals(new int[]{1,2,3}, new int[]{1,2,3}, \"Array Equal Test\");
    //因为顺序不同测试失败
    Assertions.assertArrayEquals(new int[]{1,2,3}, new int[]{1,3,2}, \"Array Equal Test\");
    //因为元素数量不同测试失败
    Assertions.assertArrayEquals(new int[]{1,2,3}, new int[]{1,2,3,4}, \"Array Equal Test\");
}

3. 可迭代对象相等断言 – assertIterableEquals()

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)
// 示例
@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));
    //测试通过
    Assertions.assertIterableEquals(listOne, listTwo);
    //测试失败
    Assertions.assertIterableEquals(listOne, listThree);
    //测试失败
    Assertions.assertIterableEquals(listOne, listFour);
}

4.断言字符串行 – assertLinesMatch()

它断言预期的字符串列表与实际的字符串列表相匹配。字符串与另一个字符串匹配的逻辑是:

  • 1)检查 expected.equals(actual) 是否为真 – 如果是,继续下一对
  • 2)否则,将 expected 作为正则表达式,并通过 String.matches(String) 检查是否为真 – 如果是,继续下一对
  • 3)否则,检查预期行是否是快进标记,如果是,相应地应用快进实际行,并转到步骤1。

有效的快进标记是一个以>>开头并以>>结尾且包含至少四个字符的字符串。快进文字之间的任何字符都将被丢弃。

>>>>
>> stacktrace >>
>> single line, non Integer.parse()-able comment >>

5.断言空值 – assertNotNull() 和 assertNull()

assertNotNull() 断言 actual 不为 null。同样,isNull() 方法断言 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 = \"howtodoinjava.com\";
    //测试通过
    Assertions.assertNotNull(notNullString);
    //测试失败
    Assertions.assertNotNull(nullString);
    //测试通过
    Assertions.assertNull(nullString);
    // 测试失败
    Assertions.assertNull(notNullString);
}

6.断言对象引用 – assertNotSame() 和 assertSame()

assertNotSame() 断言 expected 和 actual 不引用相同的对象。同样,assertSame() 方法断言 expected 和 actual 引用完全相同的对象。

两者都有三个重载方法。

//重载方法
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)
// 示例
@Test
void testCase()
{
    String originalObject = \"howtodoinjava.com\";
    String cloneObject = originalObject;
    String otherObject = \"example.com\";
    //测试通过
    Assertions.assertNotSame(originalObject, otherObject);
    //测试失败
    Assertions.assertNotSame(originalObject, cloneObject);
    //测试通过
    Assertions.assertSame(originalObject, cloneObject);
    // 测试失败
    Assertions.assertSame(originalObject, otherObject);
}

7.断言超时 – assertTimeout() 和 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() {
    //测试通过
    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() 和 assertFalse()

assertTrue() 断言提供的条件为真或通过 BooleanSupplier 提供的布尔条件为真。

类似地,assertFalse() 断言提供的条件为假。

两者都具有以下重载方法:

// 重载方法
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;
}

9.断言错误 – assertThrows()

assertThrows() 断言执行提供的 Executable 时会抛出预期类型的异常,并返回该异常。

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\";
    }
}

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9519.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号