使用 Robolectric 测试 ListPreference 时出现 RuntimeException
RuntimeException when testing ListPreference with Robolectric
我正在尝试使用 Robolectric 3.0-RC3 对我的 PreferenceFragment
进行单元测试。我的首选项在 preferences.xml
文件中定义,并且有几个 ListPreference
.
当我开始使用 FragmentTestUtil.startFragment(fragment)
测试我的片段时,方法 addPreferencesFromResource(R.xml.preferences)
在我的 PreferenceFragment
的 onCreate
方法中被调用。
我得到以下异常:
原因:java.lang.RuntimeException:嗯? ResName{com.myapp:array/pageOrientation_entries}
在 org.robolectric.shadows.Converter.convertAndFill(Converter.java:99)
在 org.robolectric.shadows.Converter.convertAndFill(Converter.java:50)
在 org.robolectric.shadows.ShadowResources.createTypedArray(ShadowResources.java:232)
在 org.robolectric.shadows.ShadowResources.attrsToTypedArray(ShadowResources.java:209)
在 org.robolectric.shadows.ShadowResources.access000 美元(ShadowResources.java:55)
在 org.robolectric.shadows.ShadowResources$ShadowTheme.obtainStyledAttributes(ShadowResources.java:485)
在 android.content.res.Resources$Theme.obtainStyledAttributes(Resources.java)
在 android.content.Context.obtainStyledAttributes(Context.java:472)
在android.preference.ListPreference.构造函数(ListPreference.java:49)
在 android.preference.ListPreference.(ListPreference.java)
在 android.preference.GenericInflater.createItem(GenericInflater.java:383)
在 android.preference.GenericInflater.onCreateItem(GenericInflater.java:417)
在 android.preference.GenericInflater.createItemFromTag(GenericInflater.java:428)
在 android.preference.GenericInflater.rInflate(GenericInflater.java:481)
在 android.preference.GenericInflater.rInflate(GenericInflater.java:493)
在 android.preference.GenericInflater.inflate(GenericInflater.java:326)
在 android.preference.GenericInflater.inflate(GenericInflater.java:263)
在 android.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:272)
在 android.preference.PreferenceFragment.addPreferencesFromResource(PreferenceFragment.java:299)
在 com.myapp.ui.settings.SettingsFragment.onCreate(SettingsFragment.java:53)
在 android.app.Fragment.performCreate(Fragment.java:2031)
在 android.app.FragmentManagerImpl.moveToState(FragmentManager.java:863)
在 android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
在 android.app.BackStackRecord.run(BackStackRecord.java:833)
在 android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1452)
在 android.app.FragmentManagerImpl$1.run(FragmentManager.java:447)
在 android.os.Handler.handleCallback(Handler.java:739)
在 android.os.Handler.dispatchMessage(Handler.java:95)
在 org.robolectric.shadows.ShadowMessageQueue.dispatchMessage(ShadowMessageQueue.java:130)
在 org.robolectric.shadows.ShadowMessageQueue.access100 美元(ShadowMessageQueue.java:29)
在 org.robolectric.shadows.ShadowMessageQueue$1.run(ShadowMessageQueue.java:95)
在 org.robolectric.util.Scheduler.runOrQueueRunnable(Scheduler.java:230)
在 org.robolectric.util.Scheduler.postAtFrontOfQueue(Scheduler.java:98)
在 org.robolectric.shadows.ShadowMessageQueue.enqueueMessage(ShadowMessageQueue.java:114)
在 android.os.MessageQueue.enqueueMessage(MessageQueue.java)
在 android.os.Handler.enqueueMessage(Handler.java:631)
在 android.os.Handler.sendMessageAtTime(Handler.java:600)
在 android.os.Handler.sendMessageDelayed(Handler.java:570)
在 android.os.Handler.post(Handler.java:326)
在 android.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1358)
在 android.app.BackStackRecord.commitInternal(BackStackRecord.java:728)
在 android.app.BackStackRecord.commit(BackStackRecord.java:704)
在 org.robolectric.util.FragmentTestUtil.startFragment(FragmentTestUtil.java:14)
在 com.myapp.ui.settings.SettingsFragmentTest.startFragment(SettingsFragmentTest.java:40)
在 com.myapp.ui.settings.SettingsFragmentTest.plusFeaturesDisabled_onSignaturePrefClick(SettingsFragmentTest.java:70)
... 还有 18 个
当我注释掉所有ListPreference
并保留其他类型的偏好时,我没有这个问题。
感谢您的帮助。
Robolectric 3.0 似乎在处理通用数组资源方面存在问题,例如:
<array>
<item>Option 1</item>
</array>
就我而言,我可以通过将其显式更改为正确的数组类型来解决问题:
<string-array>
<item>Option 1</item>
</string-array>
我正在尝试使用 Robolectric 3.0-RC3 对我的 PreferenceFragment
进行单元测试。我的首选项在 preferences.xml
文件中定义,并且有几个 ListPreference
.
当我开始使用 FragmentTestUtil.startFragment(fragment)
测试我的片段时,方法 addPreferencesFromResource(R.xml.preferences)
在我的 PreferenceFragment
的 onCreate
方法中被调用。
我得到以下异常:
原因:java.lang.RuntimeException:嗯? ResName{com.myapp:array/pageOrientation_entries} 在 org.robolectric.shadows.Converter.convertAndFill(Converter.java:99) 在 org.robolectric.shadows.Converter.convertAndFill(Converter.java:50) 在 org.robolectric.shadows.ShadowResources.createTypedArray(ShadowResources.java:232) 在 org.robolectric.shadows.ShadowResources.attrsToTypedArray(ShadowResources.java:209) 在 org.robolectric.shadows.ShadowResources.access000 美元(ShadowResources.java:55) 在 org.robolectric.shadows.ShadowResources$ShadowTheme.obtainStyledAttributes(ShadowResources.java:485) 在 android.content.res.Resources$Theme.obtainStyledAttributes(Resources.java) 在 android.content.Context.obtainStyledAttributes(Context.java:472) 在android.preference.ListPreference.构造函数(ListPreference.java:49) 在 android.preference.ListPreference.(ListPreference.java) 在 android.preference.GenericInflater.createItem(GenericInflater.java:383) 在 android.preference.GenericInflater.onCreateItem(GenericInflater.java:417) 在 android.preference.GenericInflater.createItemFromTag(GenericInflater.java:428) 在 android.preference.GenericInflater.rInflate(GenericInflater.java:481) 在 android.preference.GenericInflater.rInflate(GenericInflater.java:493) 在 android.preference.GenericInflater.inflate(GenericInflater.java:326) 在 android.preference.GenericInflater.inflate(GenericInflater.java:263) 在 android.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:272) 在 android.preference.PreferenceFragment.addPreferencesFromResource(PreferenceFragment.java:299) 在 com.myapp.ui.settings.SettingsFragment.onCreate(SettingsFragment.java:53) 在 android.app.Fragment.performCreate(Fragment.java:2031) 在 android.app.FragmentManagerImpl.moveToState(FragmentManager.java:863) 在 android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 在 android.app.BackStackRecord.run(BackStackRecord.java:833) 在 android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1452) 在 android.app.FragmentManagerImpl$1.run(FragmentManager.java:447) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 org.robolectric.shadows.ShadowMessageQueue.dispatchMessage(ShadowMessageQueue.java:130) 在 org.robolectric.shadows.ShadowMessageQueue.access100 美元(ShadowMessageQueue.java:29) 在 org.robolectric.shadows.ShadowMessageQueue$1.run(ShadowMessageQueue.java:95) 在 org.robolectric.util.Scheduler.runOrQueueRunnable(Scheduler.java:230) 在 org.robolectric.util.Scheduler.postAtFrontOfQueue(Scheduler.java:98) 在 org.robolectric.shadows.ShadowMessageQueue.enqueueMessage(ShadowMessageQueue.java:114) 在 android.os.MessageQueue.enqueueMessage(MessageQueue.java) 在 android.os.Handler.enqueueMessage(Handler.java:631) 在 android.os.Handler.sendMessageAtTime(Handler.java:600) 在 android.os.Handler.sendMessageDelayed(Handler.java:570) 在 android.os.Handler.post(Handler.java:326) 在 android.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1358) 在 android.app.BackStackRecord.commitInternal(BackStackRecord.java:728) 在 android.app.BackStackRecord.commit(BackStackRecord.java:704) 在 org.robolectric.util.FragmentTestUtil.startFragment(FragmentTestUtil.java:14) 在 com.myapp.ui.settings.SettingsFragmentTest.startFragment(SettingsFragmentTest.java:40) 在 com.myapp.ui.settings.SettingsFragmentTest.plusFeaturesDisabled_onSignaturePrefClick(SettingsFragmentTest.java:70) ... 还有 18 个
当我注释掉所有ListPreference
并保留其他类型的偏好时,我没有这个问题。
感谢您的帮助。
Robolectric 3.0 似乎在处理通用数组资源方面存在问题,例如:
<array>
<item>Option 1</item>
</array>
就我而言,我可以通过将其显式更改为正确的数组类型来解决问题:
<string-array>
<item>Option 1</item>
</string-array>