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

使用Mockito测试时出现WrongTypeOfReturnValue错误求助

解决Mockito的WrongTypeOfReturnValue错误

可能的原因及修复方案

1. 返回类型不匹配

检查util.esutil.search()方法的实际返回类型,必须和thenReturn传入的List<BeGeo>严格一致。如果该方法实际返回的是其他类型(比如List<Map<String, Object>>),直接触发此错误。

  • 修复:核对方法签名,保证返回值类型完全匹配。

2. 泛型擦除引发的匹配问题

Java泛型在运行时会被擦除,Mockito可能无法精准识别泛型类型。可以用ArgumentMatchers模糊匹配参数,绕过泛型擦除的影响:

// 用参数匹配器替代具体实例,避免泛型识别错误
Mockito.when(util.esutil.search(ArgumentMatchers.eq(Begeo.class), 
                                ArgumentMatchers.eq(Begeo_index), 
                                ArgumentMatchers.eq(Begeo_index), 
                                ArgumentMatchers.anyList()))
       .thenReturn(list);

3. 无法mock非接口/非抽象类的方法

如果EsUtil(util.esutil的实际类型)是普通类,且search方法是final的,或者类本身是final的,Mockito默认无法正确mock这类方法,也会触发错误。

  • 修复:若为final类,改用Mockito.mock(EsUtil.class, Mockito.CALLS_REAL_METHODS),或使用PowerMockito扩展;若为final方法,建议将类重构为接口,或用PowerMockito处理。

4. 参数匹配不一致

mock时使用的参数实例,和测试代码中实际调用的参数实例不一致,Mockito会判定为不同的调用,导致返回值不匹配。

  • 修复:用ArgumentMatchers的匹配方法(如any()、eq())替代具体参数实例,或确保mock和调用时使用同一个参数对象。

额外检查点

  • 确认list确实是List<BeGeo>类型,无隐式类型转换错误。
  • 若search是静态方法,普通Mockito无法处理,需使用Mockito 3.4+的Mockito.mockStatic(),或PowerMockito。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 08:04:54