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

Mockito 3+中如何让MockedStatic返回普通Mock对象?

解决Mockito V3+静态Mock DriverManager返回Connection Mock对象的类型错误问题

问题原因

你遇到的WrongTypeOfReturnValue错误,本质是Mockito处理静态方法Mock时的类型推断问题——尽管你的mockedConnection确实是Connection类型,但lambda表达式的泛型推断导致Mockito误判返回值类型不匹配。错误提示里提到的doReturn方案确实适用,但需要调整针对静态Mock的语法写法。

解决方案

使用MockedStatic的doReturn(...).when(...)语法,直接指定返回的Mock对象,绕过类型推断的问题:

修正后的测试代码

@Test
public void testConnectionIsOk() {
    Connection mockedConnection = Mockito.mock(Connection.class);
    try (MockedStatic<DriverManager> driverManagerMockedStatic = Mockito.mockStatic(DriverManager.class)) {
        // 使用doReturn配合静态Mock的when语法
        driverManagerMockedStatic.doReturn(mockedConnection)
                .when(() -> DriverManager.getConnection(
                        Mockito.anyString(), 
                        Mockito.anyString(), 
                        Mockito.anyString()));
        
        boolean isConnectionOK = sut.testMethod();
        Assertions.assertTrue(isConnectionOK);
    }
}

替代方案:使用thenAnswer显式返回

如果上述写法仍有问题,可以用thenAnswer显式返回Mock对象,同样能绕过类型推断问题:

driverManagerMockedStatic.when(() -> DriverManager.getConnection(
                        Mockito.anyString(), 
                        Mockito.anyString(), 
                        Mockito.anyString()))
                .thenAnswer(invocation -> mockedConnection);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 17:40:06