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

Mockito:如何验证非静态方法中调用的静态方法?

解决Mockito验证静态方法调用的问题

你需要在MockedStatic的作用域内创建Animal类的实例并调用move()方法,以此触发静态方法getRandomNumber的调用,之后再执行验证逻辑。完整的测试代码如下:

import org.junit.jupiter.api.Test;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.mockStatic;

@Test
void tryVerifyStaticMethod() {
    try (MockedStatic<Animal> mockedStatic = mockStatic(Animal.class)) {
        // 创建Animal实例并调用move方法,触发静态方法调用
        Animal animal = new Animal();
        animal.move();
        
        // 验证静态方法getRandomNumber是否以参数1、10被调用了1次
        mockedStatic.verify(() -> Animal.getRandomNumber(1, 10), times(1));
    }
}

关键说明:

  • try-with-resources语法会自动管理MockedStatic的生命周期,测试结束后自动关闭静态mock,避免干扰其他测试用例。
  • 必须在MockedStatic的作用域(try代码块内部)内调用move()方法,这样Mockito才能捕获到静态方法的调用行为。
  • 如果需要自定义静态方法的返回值(比如让getRandomNumber固定返回某个值,方便验证counter的变化),可以在调用move()前添加mockedStatic.when(() -> Animal.getRandomNumber(1, 10)).thenReturn(5);这类语句。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 05:05:00