Using mockito any() throws java.lang.IllegalAccessError: class org.mockito.Matchers tried to access private method

Using mockito any() throws java.lang.IllegalAccessError: class org.mockito.Matchers tried to access private method

我遇到了异常

java.lang.IllegalAccessError: class org.mockito.Matchers tried to access private method 'void org.mockito.internal.progress.ThreadSafeMockingProgress.()' (org.mockito.Matchers and org.mockito.internal.progress.ThreadSafeMockingProgress are in unnamed module of loader 'app')

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

当我尝试在 mockito when() 存根调用中使用匹配器 any() 时。 class 参数类型用于 binance spot java 库 here

中的“NewOrder”

我正在努力

when(mockBinanceApiRestClient.newOrder(any(NewOrder.class))).thenReturn(buyOrderResp);

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

您的类路径中似乎有两个相互冲突的 Mockito 版本。

ThreadSafeMockingProgress was converted to a singleton back in 2016,其构造函数改为private。

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

中被删除

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

    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-all</artifactId>
        <version>2.0.2-beta</version>
        <scope>test</scope>
    </dependency>

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

import static org.mockito.Matchers.any;

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

import static org.mockito.ArgumentMatchers.any;

这解决了问题。