You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java 8 Mockito中让void方法抛出异常时显示传入参数

解决Mockito模拟Void方法时抛出含接收参数的异常(Java 8环境)

你原来的写法无法拿到实际调用时的参数,因为doThrow里的异常是提前创建的,param1和param2并不是真实传入的参数值。要实现需求,可以用doAnswer配合Java 8的Lambda表达式自定义Void方法的行为,直接在逻辑中获取真实参数并判断:

Mockito.doAnswer(invocation -> {
    // 获取调用时传入的真实参数
    String param1 = invocation.getArgument(0);
    String param2 = invocation.getArgument(1);
    
    if ("correct".equals(param1) && "correct".equals(param2)) {
        return null; // Void方法的Answer需返回null,等价于doNothing()
    } else {
        throw new RuntimeException(String.format("Failed step 1. Received parameters: %s, %s", param1, param2));
    }
}).when(factory).load(any(), any());

关键说明:

  • 获取真实参数:通过invocation.getArgument(index)可以拿到方法调用时传入的实际参数,解决了你之前无法捕获真实参数的问题
  • Void方法适配:Void方法的Answer只需返回null,就等价于doNothing()的效果
  • Java 8兼容性:Lambda表达式完美适配Java 8环境,无需额外依赖或复杂的匿名内部类
  • 异常类型:如果被模拟的方法声明了受检异常,需抛出对应类型;示例中用RuntimeException是通用写法,可根据需求替换

内容的提问来源于stack exchange,提问作者DielandThings

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 07:57:39