如何使用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
相关产品推荐
相关产品推荐

