50

刚开始使用 Robolectric,它似乎正是我所需要的。但是,我在使用 SharedPreferences 方面遇到了一些障碍。

我有两个测试用例

  1. Activity 需要一个新的/空的 sharedPreferences

  2. Activity 期望 sharedPreferences 中已经包含一些数据

对于测试用例 1,测试按预期通过,一切都很好:)

但是,对于测试用例 2,我似乎无法找到一种向 Robolectric 提供一些假数据的好方法,因此 Activity 能够访问这些假数据。

这感觉像是一个非常常见的用例,但我似乎无法弄清楚该怎么做!

4

4 回答 4

60

发现如何 - 现在看起来很明显!

对于那些感兴趣的人,您只需获取 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();

希望这对某人有所帮助:)

于 2012-03-18T01:32:03.137 回答
21

我投票接受的答案当然是正确的。如果您使用的是 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();
于 2015-11-07T08:18:25.567 回答
8

适合我的 Robolectric 3.1 SNAPSHOT 解决方案......并且可能适合您

    Context context = RuntimeEnvironment.application.getApplicationContext();
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
    sharedPreferences.edit().putBoolean("useOnlyOnWifi", false).commit();

我使用这段代码仅在 wifi 上进行测试

于 2016-06-07T01:58:30.740 回答
4

robolectric:4.0.2采用 val context = ApplicationProvider.getApplicationContext<YourApplication>() PreferenceManager.getDefaultSharedPreferences(context)

于 2019-01-03T08:52:38.153 回答