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

Mockito verify抛出UnfinishedVerificationException问题求助

解决Mockito的UnfinishedVerificationException问题

你碰到的这个UnfinishedVerificationException是Mockito里很常见的问题,我帮你梳理下最可能的原因和解决办法:

最常见的原因:Mock对象未正确初始化

你用了@Mock注解来创建listMultipleChoiceMock,但如果没让Mockito处理这个注解,这个mock对象其实只是个普通的null或者未被代理的实例,调用verify()自然会报错。

解决办法分场景:

  • JUnit 4环境:在测试类顶部加上@RunWith(MockitoJUnitRunner.class)注解,让Mockito接管测试类的初始化流程。
  • JUnit 5环境:换成@ExtendWith(MockitoExtension.class)注解。
  • 手动初始化:如果不想用注解驱动,也可以在测试前置方法里手动调用MockitoAnnotations.openMocks(this);——比如JUnit 4的@Before或者JUnit 5的@BeforeEach方法中执行这行代码。

检查verify调用的语法细节

你的verify写法本身没问题,但可以再确认几点:

  • 确保方法签名完全匹配:比如setRequired(true)的参数类型是否和实际方法一致(比如方法是否接受boolean类型),有没有拼写错误的方法名。
  • 第三个verify里用了any(IModel.class),要确认已经静态导入了Mockito的any方法(import static org.mockito.Mockito.any;),如果没导入,需要写成Mockito.any(IModel.class)才会生效。

正确的示例代码

比如JUnit 5的完整测试类示例:

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.any;

@ExtendWith(MockitoExtension.class)
public class YourTestClass {

    @Mock
    private ListMultipleChoice<String> listMultipleChoiceMock;

    @Test
    public void testMethod() {
        // 先执行被测试的代码,触发mock对象的三个方法调用
        // 例如:yourService.configureList(listMultipleChoiceMock);

        // 验证方法调用
        verify(listMultipleChoiceMock).setRequired(true);
        verify(listMultipleChoiceMock).setMaxRows(2);
        verify(listMultipleChoiceMock).setDefaultModel(any(IModel.class));
    }
}

其他可能的排查点

如果上面的方法都没用,再检查:

  • 有没有在verify之前调用过reset(listMultipleChoiceMock),重置了mock对象的调用记录。
  • 有没有混用其他测试框架(比如PowerMock),可能和Mockito的初始化逻辑冲突,需要调整框架配置。

内容的提问来源于stack exchange,提问作者Robert van der Spek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:03:14