【问题标题】:Trouble configuration of mockito with eclipse. Gives error: java.lang.verifyError使用 eclipse 配置 mockito 的问题。给出错误:java.lang.verifyError
【发布时间】:2013-12-17 04:44:45
【问题描述】:

当我将 mockito 库添加到类路径,并使用一个简单的 mockito 示例进行测试时,我尝试使用 mock 对象为函数 add 返回错误值,我得到 java.lang.verifyerror。以下是用于测试的代码,后面是logcat。

    @Test
    public void testadd()
    {
        maincode obj2=mock(maincode.class);
        when(obj2.add(0, 0)).thenReturn(9);
        assertEquals(obj2.add(0, 0),9); 
    }

我收到以下错误。请帮忙!谢谢。

java.lang.VerifyError: org/mockito/cglib/core/ReflectUtils 在 org.mockito.cglib.core.KeyFactory$Generator.generateClass(KeyFactory.java:167) 在 org.mockito.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25) 在 org.mockito.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:217) 在 org.mockito.cglib.core.KeyFactory$Generator.create(KeyFactory.java:145) 在 org.mockito.cglib.core.KeyFactory.create(KeyFactory.java:117) 在 org.mockito.cglib.core.KeyFactory.create(KeyFactory.java:109) 在 org.mockito.cglib.core.KeyFactory.create(KeyFactory.java:105) 在 org.mockito.cglib.proxy.Enhancer.(Enhancer.java:70) 在 org.mockito.internal.creation.jmock.ClassImposterizer.createProxyClass(ClassImposterizer.java:85) 在 org.mockito.internal.creation.jmock.ClassImposterizer.imposterise(ClassImposterizer.java:62) 在 org.mockito.internal.creation.jmock.ClassImposterizer.imposterise(ClassImposterizer.java:56) 在 org.mockito.internal.creation.CglibMockMaker.createMock(CglibMockMaker.java:23) 在 org.mockito.internal.util.MockUtil.createMock(MockUtil.java:26) 在 org.mockito.internal.MockitoCore.mock(MockitoCore.java:51) 在 org.mockito.Mockito.mock(Mockito.java:1243) 在 org.mockito.Mockito.mock(Mockito.java:1120) 在 testaddmock.testadd(testaddmock.java:24) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191) 在 android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176) 在 android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554) 在 android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1701)

【问题讨论】:

标签: java android eclipse mockito


【解决方案1】:

默认情况下,Mockito 使用 cglib 创建动态代理,但对于 Android,这将不起作用,因为 cglib 生成 .class 文件,而不是 .dex。但是从 1.9.5 版开始,Mockito 提供了一个扩展点,允许替换代理生成引擎,所以你只需要更改这个引擎,我认为 Dexmaker 是最好的变体。

因此,要使其正常工作,您只需将 dexmaker-mockito-1.0.jar 添加到您的项目中,Mockito 就会使用它来生成他的代理。

【讨论】:

  • 正如@Spec 提到的,我们也需要dexmaker.jar
【解决方案2】:

@Grimmy dexmaker-1.0.jar 也是需要的。

@user3054298 我遇到了同样的问题并按照此博客的指南解决了:http://corner.squareup.com/2012/10/mockito-android.html

Mockito 1.9.5 中的一项新功能是支持 Android 的 Dalvik 运行时。它使用 DexMaker 动态生成模拟类。要在设备或模拟器上使用 Mockito,您需要将三个 .jar 文件添加到测试项目的 libs 目录中:mockito-all-1.9.5.jar、dexmaker-1.0.jar 和 dexmaker-mockito-1.0.jar .

【讨论】:

    【解决方案3】:

    @Grimmys answer (+1) 为我提供了正确答案。

    在 Android 上运行时,只需为 Dexmaker 添加缺少的 gradle 导入即可

    androidTestCompile 'org.mockito:mockito-core:1.9.5' 
    androidTestCompile 'com.google.dexmaker:dexmaker:1.1' 
    androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.1'
    

    【讨论】:

      【解决方案4】:

      我被类似的错误困住了 3 天!添加 dexmaker 库根本没有帮助!最后,我将 power mock 的版本更改为最新的 1.5.6,之后它运行良好!希望这对某人也有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-13
        • 1970-01-01
        相关资源
        最近更新 更多