java-為Robolectri提供SharedPreferences的測試數據

剛開始使用Robolectric,這似乎是我所需要的。 但是,在使用SharedPreferences方面可以领救济金的游戏,我遇到了一些障礙。

我有兩個測試案例

  1. 活動需要一個新的/空的sharedPreferences

  2. 活動期望其中已經包含一些數據的sharedPreferences

對于測試用例1,測試按預期通過,所以一切都很好:)

但是,對于測試用例2,我似乎無法找到一種向Robolectric提供一些虛假數據的好方法可以领救济金的游戏,因此Activity可以訪問該虛假數據。

感覺像是一個非常普通的用例,但我似乎無法弄清楚該怎么做!

asked 2020-02-29T13:27:09Z
4個解決方案
57 votes

了解如何-現在看起來如此明顯!

對于那些感興趣的人,您只需獲取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();

希望這對某人有所幫助:)

answered 2020-02-29T13:40:10Z
18 votes

我已經投票贊成的答案當然是正確的。 如果您使用的是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();
answered 2020-02-29T13:40:34Z
8 votes

適用于我的Robolectric 3.1 SNAPSHOT解決方案...可能對您有用

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

我使用此代碼段僅在wifi上進行測試

answered 2020-02-29T13:40:59Z
1 votes

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

answered 2020-02-29T13:41:19Z
translate from