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

如何用Mockito mock方法返回传入的最后一个ArrayList类型参数

正确实现方案

错误原因分析

  • 方案1失效是因为对Spy对象直接使用when(spied.method()).then()语法时,会先执行方法的真实逻辑,如果真实逻辑有依赖缺失、副作用就会导致打桩不生效,Spy对象优先推荐使用doXxx系列方法打桩。
  • 方案2报错是因为doReturn()需要传入方法实际返回的具体值,而AdditionalAnswers.returnsLastArg()是Answer接口的实现类,不是目标方法要求返回的List类型,因此出现类型不匹配错误。

正确代码

使用doAnswer替换doReturn即可,doAnswer专门用于接收Answer类型的动态返回逻辑:

// 方案A:直接使用AdditionalAnswers工具类
Mockito.doAnswer(AdditionalAnswers.returnsLastArg())
        .when(spied)
        .getPermittedUserIDs(Mockito.anyString(), Mockito.anyString(), Mockito.anyList());

如果不想依赖AdditionalAnswers,也可以手动实现Answer逻辑:

// 方案B:手动实现Answer逻辑
Mockito.doAnswer(invocation -> invocation.getArgument(2))
        .when(spied)
        .getPermittedUserIDs(Mockito.anyString(), Mockito.anyString(), Mockito.anyList());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 21:33:03