2014-02-21 94 views
1

我正在使用Mockito来模拟Android的测试类。当嘲笑任何给定的类时,除WebView外(如我在代码中看到的那样),它的行为与预期相同。当试图嘲弄使用的WebView:不能用Mockito模拟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年的依赖关系。

+0

确保导入是android.webkit – user2511882

+0

'import android.webkit.WebView;' – jneander

+0

是的,Mockito确实有一小组开发人员在使用它(http://code.google.com/p/mockito/人/列表)。我不知道下一个版本何时会发布。 –

回答

1

我在使用mockito创建mockito时,类似的问题是从FrameLayout派生的类以及来自GridView的类。

根据您提到的其他post的评论,此问题已在dexmaker和dexmaker-mockito的1.1版中得到修复。

这些库可以下载here并包含在您的libs目录中。只要确保清理和重建,以确保使用更新的1.1版本库。我已经看到了Android Studio仍然在拾取以前版本的库的问题。手动删除我的项目中的bin文件夹解决了这个问题。