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

 殇子休 发布于 2023-02-13 16:05

当我将我的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); 
    }

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

org.mockito.cglib.core.DefaultGeneratorStrategy.generate中的org.mockito.cglib.core.KeyFactory $ Generator.generateClass(KeyFactory.java:167)中的java.lang.VerifyError:org/mockito/cglib/core/ReflectUtils(DefaultGeneratorStrategy) .java:25)在org.mockito的org.mockito.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:217)org.mockito.cglib.core.KeyFactory $ Generator.create(KeyFactory.java:145). 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的org.mockito.internal.creation.jmock.ClassImposterizer.createProxyClass(ClassImposterizer.java:85).位于org.mockito.internal.creation.CglibMockMaker.createMock的org.mockito.internal.creation.jmock.ClassImposterizer.imposterise(ClassImposterizer.java:56)中的jmock.ClassImposterizer.imposterise(ClassImposterizer.java:62)(CglibMockMaker.java:23)位于org.mockito.Mockito的org.mockito.internal.MockUtil.createMock(MockUtil.java:26)org.mockito.internal.MockitoCore.mock(MockitoCore.java:51).模拟(Mockito.java:1243)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)位于android.app.Instrumentation $的android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554) InstrumentationThread.run(Instrumentation.java:1701)

Grimmy.. 13

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

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

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

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

    2023-02-13 16:07 回答
  • @Grimmys的答案(+1)对我有正确的答案.

    在Android上运行时,添加缺少的gradle导入Dexmaker就是所需的全部内容

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

    2023-02-13 16:07 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有