PowerMockito:使用PowerMickito模拟静态方法时的java.lang.NoSuchMethodError

时间:2017-06-09 15:20:21

标签: java powermockito

我正在尝试模拟静态方法

PowerMockito.mockStatic(ABC.class);
Mockito.when(ABC.selectSingleValue(any(java.sql.Connection.class), any(String.class), Matchers.<Object>anyVararg())).thenReturn("TestStatic");

以下是我得到的例外情况:

java.lang.NoSuchMethodError: org.mockito.internal.matchers.LocalizedMatcher.getMatcher()Lorg/mockito/ArgumentMatcher;
    at org.powermock.api.mockito.internal.invocation.PowerMockMatchersBinder.extractArgumentMatchers(PowerMockMatchersBinder.java:60)
    at org.powermock.api.mockito.internal.invocation.PowerMockMatchersBinder.bindMatchers(PowerMockMatchersBinder.java:44)
    at org.mockito.internal.handler.MockHandlerImpl.handle(MockHandlerImpl.java:59)
    at org.powermock.api.mockito.internal.invocation.MockitoMethodInvocationControl.performIntercept(MockitoMethodInvocationControl.java:275)
    at org.powermock.api.mockito.internal.invocation.MockitoMethodInvocationControl.invoke(MockitoMethodInvocationControl.java:201)
    at org.powermock.core.MockGateway.doMethodCall(MockGateway.java:173)
    at org.powermock.core.MockGateway.doMethodCall(MockGateway.java:155)
    at org.powermock.core.MockGateway.methodCall(MockGateway.java:132)
    a

3 个答案:

答案 0 :(得分:1)

我使用的是PowerMock 1.7.4,而使用的是Mockito 2.22.0。我通过咨询compatibility table解决了该问题,并发现必须将Mockito降级为2.8.9。完成后,异常停止出现。

答案 1 :(得分:0)

查看doc for maven central上的最新稳定版本:

doc for 1.10.19

没有getMatcher方法。

您可以在

中看到它在测试版中稍后添加

this doc for 2.0.40-beta

getMatcher
    public ArgumentMatcher getMatcher()

答案 2 :(得分:0)

这是版本兼容性问题。如果您使用的是Mockito 1.10.8 - 1.10.x,则应使用模块powermock-api-mockito 1.6.2。 如果你想使用Mockito 2(看起来你使用它),那么你应该使用模块powermock-api-mockito2。建议使用PowerMock 1.7.0RC4。

有关版本兼容性的更多信息,请参阅here