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 接口文档转换为前端 TypeScript 类型定义(interface / type)。输入:飞书文档、Spring Boot 接口文档、Swagger/OpenAPI、手写 API 文档等。输出:包含请求参数与响应结果的 .md 文件,含完整 JSDoc 注释。触发关键词:Java 转 TS、接口转换、生成前端类型、接口文档转 TypeScript、DTO/VO/BO 转 interface、后端文档转前端类型、生成接口类型、类型定义生成。
- 例如验证字符串转换不报错且结果正确:
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 捕获判断。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










