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

rwqw0loc  于 2021-06-29  发布在  Java
关注(0)|答案(26)|浏览(550)

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

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)

这是我的测试:

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);
        }
    }

我正在使用netbeans8.2。我下载了mockito-core-2.7.0.jar,然后选择“testlibraries”->“addjar”并添加了mockito-core-2.7.0.jar。
类路径和一切看起来都很好,我仍然得到例外。
有什么建议吗?

qco9c6ql

qco9c6ql16#

在我的例子中,一些异常的env设置也会导致这个错误:
在ubuntu16.04中,java和javac是7的更新替代品,但是$javau home被错误地设置为8
我把$javau搬回家,一切恢复正常

wgmfuz8q

wgmfuz8q17#

当切换到Java10和SpringBoot2时,我也遇到了同样的异常。这种依赖性组合对我很有效:

<dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-all</artifactId>
        <version>2.0.2-beta</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>net.bytebuddy</groupId>
        <artifactId>byte-buddy</artifactId>
        <version>1.8.16</version>
    </dependency>
    <dependency>
        <groupId>net.bytebuddy</groupId>
        <artifactId>byte-buddy-agent</artifactId>
        <version>1.8.16</version>
        <scope>test</scope>
    </dependency>
4zcjmb1e

4zcjmb1e18#

在我的例子中,我正在处理一个不使用maven构建系统的项目。所以这就是我的工作。
导航到mockito的maven回购(使用v2.26):https://mvnrepository.com/artifact/org.mockito/mockito-core/2.26.0. 我下载了jar。
在底部的同一页上,我查找了依赖项。对于mockito 2.26.0,这些依赖项是:
字节5.1.9.10(https://mvnrepository.com/artifact/net.bytebuddy/byte-buddy/1.9.10)
byte buddy java代理v1.9.10(https://mvnrepository.com/artifact/net.bytebuddy/byte-buddy-agent/1.9.10)
对象2.6版(https://mvnrepository.com/artifact/org.objenesis/objenesis/2.6)我在eclipse中下载了上述mockito依赖项的jar文件,创建了一个包含四个jar文件的用户库,并将其添加到我的项目中。
注意:(创建库是可选的,您可以直接将jar添加到您的项目构建路径)
希望这对别人有帮助。

7uhlpewt

7uhlpewt19#

问题:powermock+mockito+testng+powermocktestcase

分享我的问题/解决方案,以防对任何人有所帮助。
我的依赖关系都指向正确:

testImplementation 'org.mockito:mockito-core:2.8.47'
testImplementation 'org.powermock:powermock-core:1.7.4'
testImplementation 'org.powermock:powermock-module-testng:1.7.4'
testImplementation 'org.powermock:powermock-api-mockito2:1.7.4'

但我还是犯了以下错误:

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.$Proxy11.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:186)
    at org.mockito.internal.creation.MockSettingsImpl.confirm(MockSettingsImpl.java:180)
    at org.mockito.internal.MockitoCore.mock(MockitoCore.java:62)
    at org.mockito.Mockito.mock(Mockito.java:1729)
    at org.mockito.internal.configuration.MockAnnotationProcessor.process(MockAnnotationProcessor.java:33)
    at org.mockito.internal.configuration.MockAnnotationProcessor.process(MockAnnotationProcessor.java:16)
    at org.mockito.internal.configuration.IndependentAnnotationEngine.createMockFor(IndependentAnnotationEngine.java:38)
    at org.mockito.internal.configuration.IndependentAnnotationEngine.process(IndependentAnnotationEngine.java:62)
    at org.mockito.internal.configuration.InjectingAnnotationEngine.processIndependentAnnotations(InjectingAnnotationEngine.java:57)
    at org.mockito.internal.configuration.InjectingAnnotationEngine.process(InjectingAnnotationEngine.java:41)
    at org.mockito.MockitoAnnotations.initMocks(MockitoAnnotations.java:69)

我的测试是这样的:

import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.testng.PowerMockTestCase;
import static org.mockito.MockitoAnnotations.initMocks;

@PrepareForTest(MyClass.class)
public class MyTest extends PowerMockTestCase {

    @BeforeTest
    public void init() {
        initMocks(this);
    }
}

如本线程中所述,删除 initMocks() 方法删除错误,但所有模拟都变为null。

✅ 解决方案:beforetest vs beforethod

我发现我的案子 @BeforeTest 实际上是个问题。把它改成 @BeforeMethod 已解决错误。

import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.testng.PowerMockTestCase;
import static org.mockito.MockitoAnnotations.initMocks;

@PrepareForTest(MyClass.class)
public class MyTest extends PowerMockTestCase {

    @BeforeMethod // CHANGE THIS!
    public void init() {
        initMocks(this);
    }
}

我猜这和豆子注射有关; @BeforeTest 在任何豆子被注射之前执行 @BeforeMethod 在注入bean之后执行。但不知道它到底是如何影响的。

jhkqcmku

jhkqcmku20#

缺少引用:
byte-buddy-1.6.5.jar文件
byte-buddy-agent-1.6.5.jar
objenesis-2.5.jar
自从mockito2.0.2beta版以来,mockito内核就有依赖性。

0qx6xfy6

0qx6xfy621#

对我来说,问题是intellij将测试作为集成测试运行。所以我需要手动创建junit测试

nwlls2ji

nwlls2ji22#

我有同样的问题-相同的堆栈跟踪出现在我的日志中。这是典型的问题与项目设置。。。或
如果bytebuddys jars没有正确下载,那么问题可能出在这些jars中。
当我尝试手动检查classloadingstrategy类时,我得到了zip错误。
在这种情况下,从本地maven目录手动删除byte buddy就足够了,通常位于:
{home}/.m2/repository/net/bytebuddy/
下一次尝试运行项目或测试时,它们将再次下载,并应按预期工作。
不幸的是,当类或jar丢失以及jar损坏时,普通java类加载器以同样的方式面对。

o4hqfura

o4hqfura23#

我遇到了这个问题,通过将我的org.mockito.mockito-core版本升级到最新版本来解决了这个问题。我使用旧版本已经有相当长一段时间了。

uemypmqf

uemypmqf24#

我在一个现有的项目中遇到了同样的问题。我使用了Java8,另外还安装了Java10。所以我开始得到这个例外。我卸载了java10,它没有帮助。我从maven repo中删除了bytebuddy jars,但没有任何帮助。只有在从maven repo中完全删除所有jar之后,我才能再次编译这个项目。

wko9yo5t

wko9yo5t25#

从出现错误的maven存储库路径中手动删除“byte-buddy-1.7.11.jar”。maven更新了项目,问题就解决了。努力为我工作。

vs91vp4v

vs91vp4v26#

我通过在maven的pom xml中删除jmockit解决了这个问题。在那之后,我的JUnit5测试就完美地工作了。

<dependency>
        <groupId>org.jmockit</groupId>
        <artifactId>jmockit</artifactId>
        <version>1.41</version>
        <scope>test</scope>
    </dependency>

对于这种依赖关系,我总是会遇到如下错误:

java.lang.IllegalStateException: Could not initialize plugin: interface org.mockito.plugins.MockMaker (alternate: null)
...

Could not initialize inline Byte Buddy mock maker. (This mock maker is not supported on Android.)
...

Caused by: com.sun.tools.attach.AttachNotSupportedException: no providers installed
...

相关问题