android - 无法使用 Mockito 模拟 WebView

标签 android testing mocking android-webview mockito

我正在使用 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 年以来的依赖所束缚。

最佳答案

我在使用mockito为从FrameLayout派生的类以及从GridView派生的类创建模拟时遇到了类似的问题。

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

可以下载这些库 here并包含在您的 libs 目录中。请务必清理并重建以确保使用更新的版本 1.1 库。我遇到过 Android Studio 仍然使用以前版本的库的问题。手动删除项目中的 bin 文件夹解决了这个问题。

关于android - 无法使用 Mockito 模拟 WebView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21942754/

相关文章:

android - 某些设备上的 UI 未更新

触摸式 Android 缩放按钮

typescript - 用 Jest 模拟 typescript 界面

android - 在 XML 文件中使用图表引擎定位图形

android - Recyclerview 不显示警报对话框中的数据列表

python - Django 自动为任意管理表单生成 POST 数据字典

testing - 在 Salesforce 中测试返回 PageReference 的方法

java - 覆盖您不想测试的类中的方法是否是一种好方法?

java - 模拟删除方法

java - 如何使用 Spring 配置文件模拟实现相同接口(interface)的不同服务