7.7 如何为Robolectric的SharedPreferences提供测试数据?| Java Debug 笔记

336 阅读1分钟

本文正在参加「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…