【问题标题】:Unable to initialize Mockito无法初始化 Mockito
【发布时间】:2018-10-05 18:58:18
【问题描述】:

我正在尝试设置 Mockito 2.22 并已下载 mockito-core-2.22.2.jarbyte-buddy-1.9.0.jar,并且在 Netbeans 8.2 项目中,我已将 JUnit 4.12Hamcrest 1.3 这两个 jar 文件添加到测试库中。

当我尝试运行 MCVE 时:

package com.stackoverflow.test;

import org.junit.Test;
import static org.mockito.Mockito.mock;

public class SimpleMockTest {
    public static class A{
        public String value(){ return "A"; }
    }
    @Test
    public void testASimpleMock()
    {
        A mocked = mock( A.class );
    }
}

当我尝试运行测试时,我得到了错误:

Could not initialize plugin: interface org.mockito.plugins.InstantiatorProvider2 (alternate: interface org.mockito.plugins.InstantiatorProvider)
java.lang.IllegalStateException
    at org.mockito.internal.configuration.plugins.PluginLoader$1.invoke(PluginLoader.java:74)
    at com.sun.proxy.$Proxy12.getInstantiator(Unknown Source)
    at org.mockito.internal.creation.bytebuddy.SubclassByteBuddyMockMaker.createMock(SubclassByteBuddyMockMaker.java:44)
    at org.mockito.internal.creation.bytebuddy.ByteBuddyMockMaker.createMock(ByteBuddyMockMaker.java:25)
    at org.mockito.internal.util.MockUtil.createMock(MockUtil.java:35)
    at org.mockito.internal.MockitoCore.mock(MockitoCore.java:69)
    at org.mockito.Mockito.mock(Mockito.java:1895)
    at org.mockito.Mockito.mock(Mockito.java:1804)
    at com.stackoverflow.test.SimpleMockTest.testASimpleMock(SimpleMockTest.java:13)
    at org.mockito.internal.creation.instance.ObjenesisInstantiator.<init>(ObjenesisInstantiator.java:16)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at org.mockito.internal.configuration.plugins.DefaultMockitoPlugins.create(DefaultMockitoPlugins.java:66)
    at org.mockito.internal.configuration.plugins.DefaultMockitoPlugins.getDefaultPlugin(DefaultMockitoPlugins.java:43)
    at org.mockito.internal.configuration.plugins.PluginLoader.loadPlugin(PluginLoader.java:67)
    at org.mockito.internal.configuration.plugins.PluginRegistry.<init>(PluginRegistry.java:32)
    at org.mockito.internal.util.MockCreationValidator.validateType(MockCreationValidator.java:22)
    at org.mockito.internal.creation.MockSettingsImpl.validatedSettings(MockSettingsImpl.java:238)
    at org.mockito.internal.creation.MockSettingsImpl.build(MockSettingsImpl.java:226)
    at org.mockito.internal.MockitoCore.mock(MockitoCore.java:68)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

我还缺少另一个依赖项吗?或者需要进行一些其他配置/注释/设置来修复错误并允许模拟对象?

【问题讨论】:

  • 帮自己一个忙,并使用处理依赖项的 buid 工具(即 gradle 或 Maven,如文档 (site.mockito.org) 中所述。这里是 direct 依赖项如果你使用一个,它会自动为你获取:site.mockito.org。当然,这些依赖项本身可以有其他依赖项,等等。这是我们使用此类构建工具的原因之一。
  • @JBNizet 我正在开发一个永远不会连接到互联网的离线系统。我使用的另一个 Internet 连接网络被锁定,因此我无法创建用于打包依赖项的本地存储库。除此之外,我很想使用这条路线,因为它可以为我省去很多麻烦。
  • 我说的是 build 工具。在运行时不使用构建工具。您使用它来下载依赖项并构建您的应用程序。然后,该应用程序可以部署在您想要的任何地方,并且不需要任何互联网访问。更不用说 Mockito 通常用于测试您的代码。它不在运行时使用。

标签: java mockito junit4


【解决方案1】:

@JBNizet 使用 Maven 的建议让我找到了Mockito's maven pom,其中列出了依赖项:

  • 字节伙伴 1.9.0
  • byte-buddy-agent 1.9.0
  • 对象2.6

下载 objenesis 并将其添加到项目中解决了该问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    • 2017-06-18
    • 1970-01-01
    • 2022-01-15
    相关资源
    最近更新 更多