当我将我的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)
答案 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,之后它运行良好!希望这对某人也有帮助。