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

Mockito中出现Unfinished Stubbing Detected错误,求排查解决

Mockito存根未完成问题解决方案

错误信息

检测到未完成的存根操作:
错误发生在doCallRealMethod()代码行

原测试代码

class Mocktest {
    KafkaProducer kafkaProducer = Mockito.mock(KafkaProducer.class);

    @Test
    public void consumeRecordsTest() throws IOException {
        doCallRealMethod().when(this.kafkaProducer).publishMessage(any(BaseBizDTO.class));
        ArgumentCaptor<BaseBizDTO> argument = ArgumentCaptor.forClass(BaseBizDTO.class);
        verify(this.kafkaProducer, atMost(2)).publishMessage(argument.capture());
        List<BaseBizDTO> values = argument.getAllValues();
    }
    
}

class KafkaProducer {
    public void publishMessage(BaseBizDTO dto) {}
}

问题原因

  1. 测试流程缺失关键步骤:存根后未触发publishMessage方法的调用,直接执行验证操作,导致Mockito存根逻辑异常。
  2. 可能存在Mockito静态方法未正确导入的情况,导致语法解析错误触发存根未完成提示。

修复方案

1. 补充必要的静态导入

确保导入Mockito核心静态方法:

import static org.mockito.Mockito.*;
import static org.mockito.ArgumentMatchers.*;
import static org.junit.jupiter.api.Assertions.*; // 若使用JUnit 5,用于断言

2. 修改测试代码,完善测试流程

class Mocktest {
    KafkaProducer kafkaProducer = Mockito.mock(KafkaProducer.class);

    @Test
    public void consumeRecordsTest() throws IOException {
        // 存根:指定mock对象调用publishMessage时执行真实方法
        doCallRealMethod().when(kafkaProducer).publishMessage(any(BaseBizDTO.class));
        
        // 触发目标方法调用(原代码缺失此步骤)
        kafkaProducer.publishMessage(new BaseBizDTO());
        kafkaProducer.publishMessage(new BaseBizDTO());
        
        // 创建参数捕获器
        ArgumentCaptor<BaseBizDTO> argument = ArgumentCaptor.forClass(BaseBizDTO.class);
        // 验证方法调用次数并捕获参数
        verify(kafkaProducer, atMost(2)).publishMessage(argument.capture());
        
        // 获取并验证捕获的参数
        List<BaseBizDTO> values = argument.getAllValues();
        assertEquals(2, values.size()); // 可选:添加断言验证结果
    }
}

class KafkaProducer {
    public void publishMessage(BaseBizDTO dto) {}
}

// 补充原代码缺失的BaseBizDTO类定义
class BaseBizDTO {}

说明

  • 必须在存根完成后触发目标方法的调用,否则Mockito无法捕获方法调用记录,验证操作会失败,甚至触发存根未完成的异常。
  • 确保所有Mockito相关的静态方法都被正确导入,避免因方法引用错误导致的语法问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:13:32