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
相关产品推荐
相关产品推荐

