在我的 Android 应用程序中,我想测试一些配置然后加载我的广告的 Activity 方法。
我在我的 MainActivity 上使用 ActivityInstrumentationTestCase2
为了避免在测试期间加载真实的广告,我想模拟这两个类然后验证它们。
import com.google.ads.AdRequest;
import com.google.ads.AdView;
我正在使用 mockito、dexmaker 和 dexmaker-mockito。一切正常,我还使用 Emma 跟踪代码覆盖率。
然而,在某些版本的 Android 上似乎无法模拟这些类,因为 AdView 扩展了 RelativeLayout 并且它有一些 DexMaker 无法处理的 final方法。
这会在测试期间产生此跟踪:
[exec] Error in testAdWithLocation:
[exec] java.lang.VirtualMachineError
[exec] at dalvik.system.DexFile.defineClass(Native Method)
[exec] at dalvik.system.DexFile.loadClassBinaryName(DexFile.java:207)
[exec] at dalvik.system.DexFile.loadClass(DexFile.java:196)
[exec] at dalvik.system.DexClassLoader.findClass(DexClassLoader.java:226)
[exec] at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
[exec] at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
[exec] at com.google.dexmaker.stock.ProxyBuilder.loadClass(ProxyBuilder.java:272)
[exec] at com.google.dexmaker.stock.ProxyBuilder.buildProxyClass(ProxyBuilder.java:254)
[exec] at com.google.dexmaker.mockito.DexmakerMockMaker.createMock(DexmakerMockMaker.java:56)
[exec] at org.mockito.internal.util.MockUtil.createMock(MockUtil.java:26)
[exec] at org.mockito.internal.MockitoCore.mock(MockitoCore.java:51)
[exec] at org.mockito.Mockito.mock(Mockito.java:1243)
[exec] at org.mockito.Mockito.mock(Mockito.java:1120)
[exec] at net.mackenzie_serres.meteowidget.ui.activities.MainActivityTests.testAdWithLocation(MainActivityTests.java:430)
[exec] at java.lang.reflect.Method.invokeNative(Native Method)
[exec] at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:204)
[exec] at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:194)
[exec] at android.test.ActivityInstrumentationTestCase2.runTest(ActivityInstrumentationTestCase2.java:186)
[exec] at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
[exec] at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
[exec] at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529)
[exec] at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1448)
为了避免这种情况,我能够模拟 AdRequest 并使用真正的 AdView,但我怀疑这是我被 Google 列入黑名单并且我的广告帐户被卡住的原因。
关于如何能够将其测试回 API 9,但又不被列入黑名单,有什么想法吗?
谢谢
最佳答案
在 Admob 库上创建一个薄抽象层并模拟该抽象。
这可能意味着您将无法直接将 AdView
放入您的 Fragment
/Activity
布局中。
关于android - 尝试模拟 AdView 类时出现 VirtualMachine 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23029992/