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

Mockito无法mock方法调用返回值,报MissingMethodInvocationException错误

问题根因

你当前触发的MissingMethodInvocationException核心是以下几个错误共同导致的:

  1. 未为WebSplitUtils开启静态mock上下文:你需要stub的WebSplitUtils.getConfigService()是静态方法,必须在Mockito的静态mock作用域内才能stub,你当前仅开启了JwtUtil的静态mock,Mockito无法识别WebSplitUtils的方法调用属于mock操作
  2. 错误mock了待测试类:你把需要验证逻辑的JwtUtil整个静态mock了,导致执行JwtUtil.checkIssuer时会走mock逻辑,不会执行真实的业务代码,测试完全失效
  3. 不规范的常量调用:你通过mock的configService实例调用静态常量ENABLE_CHECK_ISSUER_PBX,可能触发Mockito的参数匹配异常,静态常量应通过类名直接调用
  4. 缺少必要的stub逻辑:你没有为decodedJWT.getIssuer()设置返回值,即使前面的mock逻辑正确,也无法触发TokenException
修复步骤
  1. 移除JwtUtil的静态mock声明,保留真实方法调用
  2. 新增WebSplitUtils的静态mock到try-with-resources块,为静态方法stub提供作用域
  3. 替换configService.ENABLE_CHECK_ISSUER_PBX为ConfigServiceImpl.ENABLE_CHECK_ISSUER_PBX,规范常量调用
  4. 补充decodedJWT.getIssuer()的stub逻辑,返回和测试入参Issuer.PBXWEB.value()不同的值,触发异常校验
修正后的测试代码
@Test
public void negative_test_for_issuer_for_JWT_used_in_method_getCallInNumbersForPBX() {
    DecodedJWT decodedJWT = Mockito.mock(DecodedJWT.class);
    ConfigService configService = Mockito.mock(ConfigServiceImpl.class);
    // 仅开启WebSplitUtils的静态mock,JwtUtil保留真实调用
    try (MockedStatic<WebSplitUtils> webSplitUtilsMock = Mockito.mockStatic(WebSplitUtils.class))
    {
        // 修正常量调用方式
        Mockito.when(configService.isEnableConfig(ConfigServiceImpl.ENABLE_CHECK_ISSUER_PBX)).thenReturn(true);
        Mockito.when(WebSplitUtils.getConfigService()).thenReturn(configService);
        // 补充decodedJWT的stub,返回不匹配的issuer
        Mockito.when(decodedJWT.getIssuer()).thenReturn("invalid_issuer");
        // 断言真实JwtUtil.checkIssuer方法抛出异常
        Assertions.assertThrows(TokenException.class,()-> JwtUtil.checkIssuer(decodedJWT, Issuer.PBXWEB.value()));
    }
}
额外排查点

如果修改后仍有问题,可按以下顺序排查:

  • 确认Mockito版本 >= 3.4.0,只有该版本及以上才支持静态方法mock
  • 确认ConfigService接口/类的isEnableConfig方法不是final修饰,final方法无法被mock
  • 确认测试类的classpath下mockito-extensions/org.mockito.plugins.MockMaker文件内容确实为mock-maker-inline,且没有被其他配置覆盖

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:30:02