assertDoesNotThrow用于断言代码不抛出任何异常,接收Executable或Supplier,执行后无异常则通过,有异常则失败;支持获取返回值用于后续断言,与assertThrows目标相反,不可混用。

assertDoesNotThrow 用于断言一段代码执行过程中不抛出任何异常,是 JUnit5 中处理“预期无异常”场景的简洁方式。
基本用法:传入 Lambda 表达式
它接收一个 Executable(通常是 Lambda),执行该代码块;若未抛出异常,则测试通过;一旦抛出任何异常(包括 RuntimeException、Exception 或其子类),测试立即失败。
- 写法示例:
list.add("item");
list.get(0);
});
这段代码会依次执行 add 和 get,只要中间任意一步抛异常(比如 IndexOutOfBoundsException),测试就失败。
捕获并检查返回值(带泛型版本)
如果被测代码有返回值,用 assertDoesNotThrow(Supplier<t>)</t>,它不仅验证不抛异常,还返回执行结果,可用于后续断言:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
立即学习“Java免费学习笔记(深入)”;
- 例如验证字符串转换不报错且结果正确:
assertEquals("123", result);
和 expectThrows 的关键区别
assertDoesNotThrow 关注“零异常”,而 assertThrows 关注“必须抛指定异常”。两者目标相反,不能混用:
- 想确认“空列表调用 get(0) 必须抛异常” → 用
assertThrows(IndexOutOfBoundsException.class, () -> list.get(0)) - 想确认“非空列表调用 get(0) 不应抛异常” → 用
assertDoesNotThrow(() -> list.get(0))
常见误用提醒
注意不要在 lambda 内部吞掉异常(比如加 try-catch),否则 assertDoesNotThrow 就失去了意义:
- ❌ 错误写法(掩盖异常):
try { riskyMethod(); } catch (Exception e) { /* 忽略 */ }
});
✅ 正确做法是让异常自然抛出,由 JUnit 捕获判断。

















