我正在从PowerMockito&MockitoV2迁移到MockitoV 3+,并尝试重写我的测试
以前我有一个测试,其中mocker java.sql.DriverManager类的静态方法getConnection(...)返回一个普通的Mockito.mock(java.sql.Connection.class),现在我试图做一些类似于MockedStatic的事情,但不能使静态mock返回另一个普通的mock,有这样的错误:
org.mockito.exceptions.misusing.WrongTypeOfReturnValue:Connection$MockitoMock$sLucRb7f不能被getConnection()返回getConnection()应该返回Connection***如果你不确定为什么你会得到上面的错误,请继续阅读。由于语法的性质,可能会发生上述问题,因为:
1.这个异常 * 可能 * 发生在错误编写的多线程测试中。请参考Mockito常见问题解答了解并发测试的限制。
- 使用when(spy.foo()).then()语法清除间谍。更安全的方法是-
- 关于doReturn| Throw()方法族。Mockito.spy()方法的javadocs中的更多内容。
我的测试代码看起来像这样:
@Test
public void testConnectionIsOk() {
Connection mockedConnection = Mockito.mock(Connection.class);
try (MockedStatic<DriverManager> driverManagerMockedStatic = Mockito.mockStatic(DriverManager.class)) {
driverManagerMockedStatic.when(
() -> DriverManager.getConnection(Mockito.anyString(), Mockito.anyString(), Mockito.anyString()))
.thenReturn(mockedConnection);
boolean isConnectionOK = sut.testMethod();
Assertions.assertTrue(isConnectionOK);
}
}
我知道错误要求我使用Mockito.doReturn(mockedConnection).when(...)
,但我无法在该.when(...)
块中传递静态方法调用
此用例是否有任何变通方法,或者我是否遗漏了什么?
1条答案
按热度按时间a14dhokn1#
你可以使用use
thenAnswer
而不是thenReturn
,并返回lambda表达式,如下所示: