无法初始化插件:interface org.mockito.plugins.MockMaker

Pas*_*kas 66 mockito

一旦测试开始,我就会遇到以下异常:

    Testcase: treeCtorArgumentTest(com.xythos.client.drive.cachedtree.CachedTreeTest):  Caused an ERROR
Could not initialize plugin: interface org.mockito.plugins.MockMaker
java.lang.IllegalStateException: Could not initialize plugin: interface org.mockito.plugins.MockMaker
    at org.mockito.internal.configuration.plugins.PluginLoader$1.invoke(PluginLoader.java:66)
    at com.sun.proxy.$Proxy7.isTypeMockable(Unknown Source)
    at org.mockito.internal.util.MockUtil.typeMockabilityOf(MockUtil.java:29)
    at org.mockito.internal.util.MockCreationValidator.validateType(MockCreationValidator.java:22)
    at org.mockito.internal.creation.MockSettingsImpl.validatedSettings(MockSettingsImpl.java:168)
    at org.mockito.internal.creation.MockSettingsImpl.confirm(MockSettingsImpl.java:162)
    at org.mockito.internal.MockitoCore.mock(MockitoCore.java:64)
    at org.mockito.Mockito.mock(Mockito.java:1687)
    at org.mockito.Mockito.mock(Mockito.java:1600)
    at com.xythos.client.drive.cachedtree.CachedTreeTest.setUp(CachedTreeTest.java:51)
Caused by: java.lang.NoClassDefFoundError: net/bytebuddy/dynamic/loading/ClassLoadingStrategy
    at org.mockito.internal.creation.bytebuddy.SubclassByteBuddyMockMaker.<init>(SubclassByteBuddyMockMaker.java:33)
    at org.mockito.internal.creation.bytebuddy.ByteBuddyMockMaker.<init>(ByteBuddyMockMaker.java:22)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at java.lang.Class.newInstance(Class.java:442)
    at org.mockito.internal.configuration.plugins.PluginLoader.loadPlugin(PluginLoader.java:54)
    at org.mockito.internal.configuration.plugins.PluginRegistry.<init>(PluginRegistry.java:18)
    at org.mockito.internal.configuration.plugins.Plugins.<clinit>(Plugins.java:17)
    at org.mockito.internal.util.MockUtil.<clinit>(MockUtil.java:24)
Caused by: java.lang.ClassNotFoundException: net.bytebuddy.dynamic.loading.ClassLoadingStrategy
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
Run Code Online (Sandbox Code Playgroud)

这是我的测试:

package com.xythos.client.drive.cachedtree;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.junit.MockitoJUnitRunner;

@RunWith(MockitoJUnitRunner.class)

    public class CachedTreeTest {

        public CachedTreeTest() {
        }

        @Test
        public void treeCtorArgumentTest() {
        somemock m = mock(SomeClass.class);
        }
    }
Run Code Online (Sandbox Code Playgroud)

我正在使用NetBeans 8.2.我已经下载了mockito-core-2.7.0.jar,然后我选择了"Test Libraries" - >"Add Jar"并添加了mockito-core-2.7.0.jar.

Classpath和一切看起来都没问题,我还是异常.

有什么建议?

Add*_*dev 83

如果您使用的是powermock,请确保您的依赖项指向:

org.powermock:powermock-api-mockito2
Run Code Online (Sandbox Code Playgroud)

代替

org.powermock:powermock-api-mockito
Run Code Online (Sandbox Code Playgroud)

  • 我没有使用** PowerMock ** (4认同)
  • 为什么不相关的答案会得到如此多的赞同? (4认同)
  • 我还不知道确切的原因,但是当我的测试在将 Spring 版本 1.5.14-RELEASE 升级到 2.0.4-RELEASE 后失败时,这个答案对我有所帮助 (3认同)
  • 这个问题与powermock无关。当您使用jre而不是jdk时,就会出现此问题。 (3认同)

Pas*_*kas 40

遗漏参考:

  • 字节好友-1.6.5.jar
  • 字节的好友剂-1.6.5.jar
  • objenesis-2.5.jar

自Mockito 2.0.2 beta以来,Mockito-core有依赖性.

  • 默认情况下包含这些库,这不是解决方案 (6认同)
  • 这些是传递依赖项,您不必显式添加它们。 (4认同)
  • 如果您不使用构建系统(maven/gradle)自动解析依赖项,则默认情况下仅包含这些(如 @Eduardo 建议),否则这可能是解决方案。 (3认同)
  • 这些 deps 也在 [maven 页面](https://mvnrepository.com/artifact/org.mockito/mockito-core/2.26.0) 中列出,位于页面底部。包括它可以解决问题。 (2认同)

小智 17

好吧,经过大量研究,解决方案对我来说非常简单:

将 Mockito lib 版本更新到最新

dependencies {
    testImplementation 'org.mockito:mockito-core:3.10.0'
    androidTestImplementation 'org.mockito:mockito-android:3.10.0'
}
Run Code Online (Sandbox Code Playgroud)


Łuk*_*ski 11

如果您启用模拟最终类的选项,则会出现 Mockito2 的这个问题。

这意味着当您在test/resources/mockito-extensions目录中时,您有一个名为org.mockito.plugins.MockMaker的文件,其中包含以下内容mock-maker-inline

在这种情况下,byte-buddy 是 mockito-core 的传递依赖项,在将自己的代理附加到 java 进程时存在问题。但是只有在使用 JRE 时才会出现问题。

解决方案是:

  • 使用 JDK 而不是 JRE

或者

  • 添加-javaagent:byte-buddy-agent-*.jar为 VM 选项


Ste*_*o L 8

我在类路径上有Byte Buddy(是Mockito 2.8.9的传递dep)并且仍然有例外.我的理由是我使用JRE而不是JDK运行了单元测试.切换到JDK对我有用.

  • @TaranmeetSingh 如果您使用 Android Studio 运行,请转到文件 &gt; 项目结构 &gt; SDK 位置,然后检查 JDK 的路径是否正确。(如果您还没有从 Oracle 网站下载 JDK,则需要下载。) (3认同)
  • 你是如何改变这一点的? (2认同)

vdo*_*dou 8

我遇到了同样的问题 - 我的日志中出现了相同的堆栈跟踪。这通常是项目设置
的问题... 或者,如果未正确下载,则问题可能出在 bytebuddys JAR 中。
当我尝试手动检查 ClassLoadingStrategy 类时,出现zip错误。

在这种情况下,只需从本地 maven 目录中手动删除 Byte Buddy,通常位于:
{home}/.m2/repository/net/bytebuddy/

下一次尝试运行项目或测试它们将再次下载并且应该可以工作正如预期的那样。

不幸的是,当类或 jar 丢失以及 jar 损坏时,常见的 Java ClassLoader 会以同样的方式面临。


小智 6

问题:PowerMock + Mockito + TestNG + PowerMockTestCase

\n\n

分享我的问题/解决方案,以防它对任何人有帮助。

\n\n

我的依赖项都被正确指向:

\n\n
testImplementation \'org.mockito:mockito-core:2.8.47\'\ntestImplementation \'org.powermock:powermock-core:1.7.4\'\ntestImplementation \'org.powermock:powermock-module-testng:1.7.4\'\ntestImplementation \'org.powermock:powermock-api-mockito2:1.7.4\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

但我仍然收到以下错误:

\n\n
java.lang.IllegalStateException: Could not initialize plugin: interface org.mockito.plugins.MockMaker\n\n    at org.mockito.internal.configuration.plugins.PluginLoader$1.invoke(PluginLoader.java:66)\n    at com.sun.proxy.$Proxy11.isTypeMockable(Unknown Source)\n    at org.mockito.internal.util.MockUtil.typeMockabilityOf(MockUtil.java:29)\n    at org.mockito.internal.util.MockCreationValidator.validateType(MockCreationValidator.java:22)\n    at org.mockito.internal.creation.MockSettingsImpl.validatedSettings(MockSettingsImpl.java:186)\n    at org.mockito.internal.creation.MockSettingsImpl.confirm(MockSettingsImpl.java:180)\n    at org.mockito.internal.MockitoCore.mock(MockitoCore.java:62)\n    at org.mockito.Mockito.mock(Mockito.java:1729)\n    at org.mockito.internal.configuration.MockAnnotationProcessor.process(MockAnnotationProcessor.java:33)\n    at org.mockito.internal.configuration.MockAnnotationProcessor.process(MockAnnotationProcessor.java:16)\n    at org.mockito.internal.configuration.IndependentAnnotationEngine.createMockFor(IndependentAnnotationEngine.java:38)\n    at org.mockito.internal.configuration.IndependentAnnotationEngine.process(IndependentAnnotationEngine.java:62)\n    at org.mockito.internal.configuration.InjectingAnnotationEngine.processIndependentAnnotations(InjectingAnnotationEngine.java:57)\n    at org.mockito.internal.configuration.InjectingAnnotationEngine.process(InjectingAnnotationEngine.java:41)\n    at org.mockito.MockitoAnnotations.initMocks(MockitoAnnotations.java:69)\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的测试是这样的:

\n\n
java.lang.IllegalStateException: Could not initialize plugin: interface org.mockito.plugins.MockMaker\n\n    at org.mockito.internal.configuration.plugins.PluginLoader$1.invoke(PluginLoader.java:66)\n    at com.sun.proxy.$Proxy11.isTypeMockable(Unknown Source)\n    at org.mockito.internal.util.MockUtil.typeMockabilityOf(MockUtil.java:29)\n    at org.mockito.internal.util.MockCreationValidator.validateType(MockCreationValidator.java:22)\n    at org.mockito.internal.creation.MockSettingsImpl.validatedSettings(MockSettingsImpl.java:186)\n    at org.mockito.internal.creation.MockSettingsImpl.confirm(MockSettingsImpl.java:180)\n    at org.mockito.internal.MockitoCore.mock(MockitoCore.java:62)\n    at org.mockito.Mockito.mock(Mockito.java:1729)\n    at org.mockito.internal.configuration.MockAnnotationProcessor.process(MockAnnotationProcessor.java:33)\n    at org.mockito.internal.configuration.MockAnnotationProcessor.process(MockAnnotationProcessor.java:16)\n    at org.mockito.internal.configuration.IndependentAnnotationEngine.createMockFor(IndependentAnnotationEngine.java:38)\n    at org.mockito.internal.configuration.IndependentAnnotationEngine.process(IndependentAnnotationEngine.java:62)\n    at org.mockito.internal.configuration.InjectingAnnotationEngine.processIndependentAnnotations(InjectingAnnotationEngine.java:57)\n    at org.mockito.internal.configuration.InjectingAnnotationEngine.process(InjectingAnnotationEngine.java:41)\n    at org.mockito.MockitoAnnotations.initMocks(MockitoAnnotations.java:69)\n
Run Code Online (Sandbox Code Playgroud)\n\n

正如本线程中提到的,删除该initMocks()方法可以消除错误,但所有模拟都会变为空。

\n\n
\n\n

\xe2\x9c\x85 解决方案:BeforeTest VS BeforeMethod

\n\n

我发现我的案例@BeforeTest实际上造成了问题。\n更改它以@BeforeMethod解决错误。

\n\n
import org.powermock.core.classloader.annotations.PrepareForTest;\nimport org.powermock.modules.testng.PowerMockTestCase;\nimport static org.mockito.MockitoAnnotations.initMocks;\n\n@PrepareForTest(MyClass.class)\npublic class MyTest extends PowerMockTestCase {\n\n    @BeforeTest\n    public void init() {\n        initMocks(this);\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的猜测是,这与 bean 注入有关;\n@BeforeTest在任何 bean 注入之前执行,而@BeforeMethod在 bean 注入之后执行。但不确定它到底有何影响。

\n


kya*_*kya 5

就我而言,删除后mockito-core,测试成功了!

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-core</artifactId>
    <version>${mockito.version}</version>
    <scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

我的版本在这里,JDK是1.8.0_121。

<properties>
    <powermock.version>2.0.7</powermock.version>
    <mockito.version>2.8.9</mockito.version>
</properties>
Run Code Online (Sandbox Code Playgroud)

现在我的依赖项是:

  • powermock-api-mockito2
  • powermock-模块-junit4


归档时间:

查看次数:

54698 次

最近记录:

6 年 前