使用eclipse配置mockito的麻烦。给出错误:java.lang.verifyError

时间:2013-12-01 12:14:26

标签: java android eclipse mockito

当我将我的mockito库添加到类路径,并使用一个简单的mockito示例进行测试时,我试图通过使用模拟对象为函数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); 
    }

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

  

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)       at 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)

4 个答案:

答案 0 :(得分:12)

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

为了使其有效,您应该只为项目添加dexmaker-mockito-1.0.jar,Mockito将使用它来生成代理。

答案 1 :(得分:7)

@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'

答案 2 :(得分: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 :(得分:0)

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