的Mockito与Eclipse麻烦配置。给出错误:java.lang.verifyError [英] Trouble configuration of mockito with eclipse. Gives error: java.lang.verifyError

查看:1652
本文介绍了的Mockito与Eclipse麻烦配置。给出错误:java.lang.verifyError的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我加入我的Mockito库类路径,并用一个简单的Mockito例如用于测试在那里我试图返回的函数值错误使用模拟对象添加,我得到java.lang.verifyerror。以下是用于测试之后的logcat的code。

  @Test
    公共无效testadd()
    {
        主要code OBJ2 =假(主要code.class);
        当(obj2.add(0,0))thenReturn(9)。
        的assertEquals(obj2.add(0,0),9);
    }
 

我碰到下面的错误。请帮忙! THX。

  

java.lang.VerifyError:组织/的Mockito / CGLIB /核心/ 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(本机方法)       在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)

解决方案

在默认情况下,的Mockito使用CGLIB来创建动态代理,但对于Android这是行不通的,因为CGLIB生成的.class文件,而不是.dex。但是,从1.9.5版本开始的Mockito提供的扩展点,允许更换代理生成引擎,因此,所有你需要的是改变这种发动机,我想的 Dexmaker 是最好的变种。

因此​​,为了使它的工作原理,你应该只需要添加 dexmaker-的Mockito-1.0.jar 为您的项目,并会的Mockito用它来生成自己的代理服务器。

When i add my mockito library to class path, and use a simple mockito example for testing where i try to return a wrong value for the function add by using the mock object, i get java.lang.verifyerror. Following is the code used for testing followed by logcat.

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

I get the following error. Please help! thx.

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

解决方案

By default, Mockito uses cglib to create dynamic proxies, but for Android this will not work, because cglib generates .class files, not .dex. But starting from version 1.9.5 Mockito offers an extension point that allows replacing the proxy generation engine, so all you need is change this engine and I think Dexmaker is the best variant.

So to make it works you should just add dexmaker-mockito-1.0.jar to your project, and Mockito will use it to generate his proxies.

这篇关于的Mockito与Eclipse麻烦配置。给出错误:java.lang.verifyError的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆