使用mockito any()会抛出java.lang.IllegalAccessError: class org.mockito.Matchers试图访问私有方法

Hug*_*ing 6 mockito

我面临着例外

java.lang.IllegalAccessError:类 org.mockito.Matchers 尝试访问私有方法 'void org.mockito.internal.progress.ThreadSafeMockingProgress.()' (org.mockito.Matchers 和 org.mockito.internal.progress.ThreadSafeMockingProgress 位于加载器“app”的未命名模块)

在 org.mockito.Matchers.(Matchers.java:107)

当我尝试在mockito when() 存根调用中使用匹配器any() 时。类参数类型适用于来自 Binance Spot Java 库的“NewOrder

我正在尝试做

when(mockBinanceApiRestClient.newOrder(any(NewOrder.class))).thenReturn(buyOrderResp);
Run Code Online (Sandbox Code Playgroud)

嘲笑BinanceApiRestClient。any() 和when() 是从org.mockito.Mockito 静态导入的。这真是一场噩梦,为什么它不起作用。任何帮助深表感谢。

小智 11

当我们使用以下依赖项时,我也遇到了类似的问题 -

    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-all</artifactId>
        <version>2.0.2-beta</version>
        <scope>test</scope>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

我们有以下导入语句导致 IllegalAccess 异常

import static org.mockito.Matchers.any;
Run Code Online (Sandbox Code Playgroud)

我用 ArgumentMatchers 替换了 Matchers,如下所示 -

import static org.mockito.ArgumentMatchers.any;
Run Code Online (Sandbox Code Playgroud)

这解决了这个问题。


Les*_*iak 8

看起来您的类路径上有两个相互冲突的 Mockito 版本。

ThreadSafeMockingProgress 早在 2016 年就被转换为单例,并且其构造函数也更改为私有。

另一方面,您似乎正在使用org.mockito.Matchers,它已被弃用很长一段时间,并最终在 Mockito 4.x 中删除