当我将我的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将使用它来生成他的代理.
默认情况下,Mockito使用cglib来创建动态代理,但对于Android,这不起作用,因为cglib生成.class文件,而不是.dex.但是从版本1.9.5开始,Mockito提供了一个允许更换代理生成引擎的扩展点,所以你需要的只是更改这个引擎,我认为Dexmaker是最好的变种.
因此,要使其工作,您只需将dexmaker-mockito-1.0.jar添加到您的项目中,Mockito将使用它来生成他的代理.
@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'