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
相关产品推荐
相关产品推荐

