我正在使用Mockito模拟用于Android测试的类。模拟除WebView之外的任何给定类时,它的行为均符合预期(据我在代码中所看到的)。尝试使用以下方法模拟WebView时:
mock(WebView.class);
我收到以下堆栈跟踪:
java.lang.VirtualMachineError
at dalvik.system.DexFile.defineClass(Native Method)
at dalvik.system.DexFile.loadClassBinaryName(DexFile.java:211)
at dalvik.system.DexPathList.findClass(DexPathList.java:305)
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:62)
at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
at com.google.dexmaker.stock.ProxyBuilder.loadClass(ProxyBuilder.java:272)
at com.google.dexmaker.stock.ProxyBuilder.buildProxyClass(ProxyBuilder.java:254)
at com.google.dexmaker.mockito.DexmakerMockMaker.createMock(DexmakerMockMaker.java:56)
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 com.ncsa.clientrms.navigation.WebFragment2Test.setUp(WebFragment2Test.java:19)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:190)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:175)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1661)
我看过this post,这可能表明这两种情况都来自同一错误,尤其是由于堆栈跟踪几乎相同。有什么我可以解决的方法吗?
附带说明一下,是否维护了Mockito?我宁愿不被2012年的依赖所束缚。
最佳答案
在使用嘲笑为来自FrameLayout的类以及来自GridView的类创建模仿时,我遇到了类似的问题。
根据您提到的其他post的评论,此问题已在dexmaker和dexmaker-mockito的1.1版中修复。
这些库可以here下载并包含在您的libs目录中。只要确保清理并重建以确保使用更新的1.1版库即可。我看到了Android Studio仍在选择早期版本库的问题。手动删除项目中的bin文件夹可以解决此问题。