在 java 单元测试中,使用 assertdoesnotthrow 可以直接验证代码块在执行过程中不会抛出任何异常。该断言接收一个 runnable 或 supplier 作为参数,如果执行期间发生异常,测试将立即失败;若顺利执行完毕,则视为通过。

如何对无参方法调用进行不抛异常断言
对于没有返回值且不接受参数的方法,通常使用 Runnable 接口来包装调用逻辑。通过 Lambda 表达式或方法引用,可以将方法调用传递给 assertDoesNotThrow,从而确保该方法在执行时是安全的。

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
public class SafeMethodTest {
@Test
public void testNoException() {
// 模拟一个可能抛出的操作
Runnable task = () -> { throw new RuntimeException("Error"); };
// 断言该任务不会抛出异常
assertDoesNotThrow(task);
}
}如何对有参或有返回值的方法进行不抛异常断言
当需要测试的方法包含参数或具有返回值时,可以使用 Supplier<t></t> 接口。这种方式允许你在断言不抛出异常的同时,捕获方法的返回值以便后续进一步验证。这对于需要确认方法既成功执行又返回正确数据的场景非常有用。
立即学习“Java免费学习笔记(深入)”;

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class ReturnValTest {
@Test
public void testWithReturn() {
Supplier<String> supplier = () -> "Success";
// 断言不抛出异常并获取返回值
String result = assertDoesNotThrow(supplier);
assertEquals("Success", result);
}
}断言失败时的具体行为与异常类型
当被测试的代码块确实抛出了异常时,assertDoesNotThrow 会中断测试并报告失败。此时,原始的异常会被封装在一个 org.opentest4j.AssertionFailedError 中,其消息会明确指出预期的“不抛出异常”与实际发生的异常类型不符。开发者可以通过查看堆栈跟踪信息来定位具体的错误来源。


















