本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看<活动链接>
提问:如何为Robolectric的SharedPreferences提供测试数据?
刚开始使用Robolectric,其他的地方的学习都比较顺利,但是在使用SharedPreferences方面,我遇到了一些障碍。
我有两个测试案例
1,活动需要一个新的/空的sharedPreferences
2,活动期望sharedPreferences中已经有一些数据
对于测试用例1,测试按预期通过,所以一切都很好
但是,对于测试用例2,我似乎无法找到一种向Robolectric提供一些虚假数据的好方法,因此Activity不可以访问该虚假数据。
感觉像是一个非常普通的使用方式,但是我似乎无法弄清楚该怎么做!
回答1:
您只需获取sharedPreferences,然后用所需的数据填充它。
SharedPreferences sharedPreferences = ShadowPreferenceManager.getDefaultSharedPreferences(Robolectric.application.getApplicationContext());
sharedPreferences.edit().putString("testId", "12345").commit();
如果您有一个自定义的SharedPreferences,则应该能够执行此操作(虽然尚未经过正确的测试,但也可以正常工作)
SharedPreferences sharedPreferences = Robolectric.application.getSharedPreferences("you_custom_pref_name", Context.MODE_PRIVATE);
sharedPreferences.edit().putString("testId", "12345").commit();
回答2:
如果您使用的是Robolectric 3,情况会略有变化
SharedPreferences sharedPreferences =
RuntimeEnvironment.application.getSharedPreferences(
"you_custom_pref_name", Context.MODE_PRIVATE);
然后,您可以像往常一样添加首选项
sharedPreferences.edit().putBoolean(
activity.getString(R.string.pref_somepref), true).commit();
回答3:
适用于我的Robolectric 3.1 SNAPSHOT解决方案...可能对您有用
Context context = RuntimeEnvironment.application.getApplicationContext();
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
sharedPreferences.edit().putBoolean("useOnlyOnWifi", false).commit();
本文翻译至Stack Overflow: stackoverflow.com/questions/9…