web-dev-qa-db-ja.com

RobolectricのSharedPreferencesのテストデータの提供

Robolectricを使い始めたばかりで、私が必要としているものはほとんどないようです。ただし、SharedPreferencesの使用に関しては、少し障害があります。

2つのテストケースがあります

  1. アクティビティは新しい/空のsharedPreferencesを期待しています

  2. アクティビティは、すでにいくつかのデータが含まれているsharedPreferencesを期待しています

テストケース1の場合、テストは期待どおりにパスしているため、すべて良好です。

ただし、テストケース2の場合、Robolectricに偽のデータを提供するための適切な方法を理解できていないため、アクティビティはこの偽のデータにアクセスできます。

それは非常に一般的な使用例のように感じますが、それを行う方法を理解することができないようです!

48
pyko

方法がわかりました-今ではとても明白に思われます!

興味のある人は、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();

これが誰かを助けたことを願っています:)

57
pyko

私が賛成票を投じた受け入れられた答えはもちろん正しいです。 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();
18
e4c5

私に有効なRobolectric 3.1 SNAPSHOTソリューション...

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

このコードスニペットはWi-Fiでのテストのみに使用します

8
Evan Parsons

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

1
shuabing