【发布时间】:2018-10-05 18:58:18
【问题描述】:
我正在尝试设置 Mockito 2.22 并已下载 mockito-core-2.22.2.jar 和 byte-buddy-1.9.0.jar,并且在 Netbeans 8.2 项目中,我已将 JUnit 4.12 和 Hamcrest 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 通常用于测试您的代码。它不在运行时使用。