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

如何使用Mockito-inline仅Mock指定静态方法而非整个类?

Mock静态类时仅指定方法Mock、其余保留原实现的解决办法

当使用Mockito-inline的mockStatic方法mock静态类时,默认会把整个类的所有静态方法都替换为mock实现——没设置stub的方法会返回null,这显然不符合“只mock指定方法,其余用原逻辑”的需求。

解决方法很简单:在调用mockStatic时,传入Mockito.CALLS_REAL_METHODS作为默认答案,这样未被我们显式stub的方法会自动执行真实的原有实现,只有指定的方法会走mock逻辑。

修改后的测试代码如下:

@Test
public void myTest() throws Exception {
    ZonedDateTime mockDateTime = ZonedDateTime.of(2022, 1, 1, 10, 10, 10, 100, ZoneId.of(DEFAULT_ZONE_ID));
    // 传入CALLS_REAL_METHODS,让未Mock的方法执行真实逻辑
    try (MockedStatic<ZonedDateTime> zonedTime = Mockito.mockStatic(ZonedDateTime.class, Mockito.CALLS_REAL_METHODS)) {
        zonedTime.when(() -> ZonedDateTime.now(ZoneId.of(DEFAULT_ZONE_ID))).thenReturn(mockDateTime);

        // myMethod内部会调用ZonedDateTime的相关方法
        ZonedDateTime zonedDateTime = myClass.myMethod();
        System.out.println("Result: "+ zonedDateTime);
    }
}

这样调整后,只有ZonedDateTime.now(ZoneId.of(DEFAULT_ZONE_ID))会返回你预设的mockDateTime,其他比如ZonedDateTime.parse()这类未指定mock的方法,都会正常执行原本的逻辑,不会再返回null。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 06:39:15