当我将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);
}
我得到以下错误。请帮忙!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.create.jmock.ClassImposterizer.createProxyClass(ClassImpostirizer.java:85)网址:org.mockito.internal.create.jmock.ClassImposterizer.omporterise(ClassImposterizer.java:62)网址:org.mockito.internal.create.jmock.ClassImposterizer.oimposterise(ClassImposterizer.java:56)网址:org.mockito.internal.create.CglibMockMaker.createMock(CglibMock Maker.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.testaddd(testaddmock.java:24)位于java.lang.reflect.Method.invokeNative(Native Method)在android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)在android.test.AndroidTestRunner.runTest(AndroidTestRunnr.java:176)在android.test.IInstrumentationTestRunner.onStart上(InstrumentationTestRuner.java:554)在android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1701)
默认情况下,Mockito使用cglib创建动态代理,但对于Android,这将不起作用,因为cglib生成.class文件,而不是.dex。但从1.9.5版本开始,Mockio提供了一个扩展点,允许替换代理生成引擎,所以您只需要更改此引擎,我认为Dexmaker是最好的变体。
因此,要使其发挥作用,您只需将dexmaker-mockito-1.0.jar添加到您的项目中,mockito就会使用它来生成他的代理。
@Grimmys的答案(+1)对我来说是正确的。
当在Android上运行时,为Dexmaker
添加缺失的渐变导入是所需的全部
androidTestCompile 'org.mockito:mockito-core:1.9.5'
androidTestCompile 'com.google.dexmaker:dexmaker:1.1'
androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.1'
@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天!添加dexmaker库根本没有帮助!最后,我把power mock的版本改成了最新的1.5.6,之后它运行得很好!希望这也能帮助到别人。