简体   繁体   English

Android Google Maps Test(JUnit4 + Robolectric 3.0)无法运行; 找不到资源异常

[英]Android Google Maps Test (JUnit4 + Robolectric 3.0) Fails To Run; Resource Not Found Exception

Using JUnit4 and Robolectric 3.0_rc3 to test a fragment with SupportMapFragment, I cannot get the a test to run. 使用JUnit4和Robolectric 3.0_rc3通过SupportMapFragment测试片段,我无法运行测试。 Can you see why? 你知道为什么吗?

The map fragment is instantiated in onCreateView of the fragment. 映射片段在片段的onCreateView中实例化。 The test includes just this: 测试仅包括以下内容:

MyFragment subject = new MyFragment();
SupportFragmentTestUtil.startVisibleFragment(subject);

Along with robolectric core, I have included robolectric:shadows-maps and robolectric:shadows-support-v4 in my build.gradle file. 与robolectric核心一起,我在build.gradle文件中包含了robolectric:shadows-maps和robolectric:shadows-support-v4。 All the other tests in my project work fine. 我项目中的所有其他测试都能正常工作。 Here's the relevant part of the error stack: 这是错误堆栈的相关部分:

android.content.res.Resources$NotFoundException: String resource ID #0x7f0c001b
    at android.content.res.Resources.getText(Resources.java:239)
    at org.robolectric.shadows.ShadowResources.getText(ShadowResources.java:358)
    at android.content.res.Resources.getText(Resources.java)
    at android.content.res.Resources.getString(Resources.java:325)
    at com.google.android.gms.common.internal.zzf.zzh(Unknown Source)
    at com.google.android.gms.common.internal.zzf.zzh(Unknown Source)
    at com.google.android.gms.dynamic.zza.zzb(Unknown Source)
    at com.google.android.gms.dynamic.zza.zzb(Unknown Source)
    at com.google.android.gms.dynamic.zza.zza(Unknown Source)
    at com.google.android.gms.dynamic.zza.zza(Unknown Source)
    at com.google.android.gms.dynamic.zza.onCreateView(Unknown Source)
    at com.google.android.gms.dynamic.zza.onCreateView(Unknown Source)
    at com.google.android.gms.maps.SupportMapFragment.onCreateView(Unknown Source)
    at com.google.android.gms.maps.SupportMapFragment.onCreateView(Unknown Source)
    at android.support.v4.app.Fragment.performCreateView(Fragment.java:1500)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:938)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1115)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1097)
    at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1895)
    at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1514)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:958)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1115)
    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1478)
    at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:446)
    at android.os.Handler.handleCallback(Handler.java:730)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at org.robolectric.shadows.ShadowMessageQueue.dispatchMessage(ShadowMessageQueue.java:130)
    at org.robolectric.shadows.ShadowMessageQueue.access$100(ShadowMessageQueue.java:29)
    at org.robolectric.shadows.ShadowMessageQueue$1.run(ShadowMessageQueue.java:95)
    at org.robolectric.util.Scheduler.runOrQueueRunnable(Scheduler.java:230)
    at org.robolectric.util.Scheduler.postAtFrontOfQueue(Scheduler.java:98)
    at org.robolectric.shadows.ShadowMessageQueue.enqueueMessage(ShadowMessageQueue.java:114)
    at android.os.MessageQueue.enqueueMessage(MessageQueue.java)
    at android.os.Handler.enqueueMessage(Handler.java:623)
    at android.os.Handler.sendMessageAtTime(Handler.java:592)
    at android.os.Handler.sendMessageDelayed(Handler.java:563)
    at android.os.Handler.post(Handler.java:323)
    at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1384)
    at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595)
    at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574)
    at org.robolectric.util.SupportFragmentTestUtil.startVisibleFragment(SupportFragmentTestUtil.java:24)

The resource ID refers to a google play asset called common_google_play_services_install_text_phone. 资源ID是指名为common_google_play_services_install_text_phone的Google Play资产。 The asset is generated in my project's directory, and also exists in com.google.android.gms, com.google.android.gms.location, and com.google.android.gms.maps. 该资产在我的项目目录中生成,并且也存在于com.google.android.gms,com.google.android.gms.location和com.google.android.gms.maps中。

Any help would be greatly appreciated! 任何帮助将不胜感激!

Problem solved. 问题解决了。 It appears that the configuration was outdated after updating Robolectric from 2.4 to 3.0. 在将Robolectric从2.4更新到3.0后,似乎配置已过时。 Following this article helped a lot: 跟随这篇文章有很大帮助:

http://evendanan.net/robolectric/unit-test/2015/04/09/migrating-to-robolectric-v3/ http://evendanan.net/robolectric/unit-test/2015/04/09/migrating-to-robolectric-v3/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM