2012-03-17 12 views
43

Robolectricを使い始めたばかりなので、必要なものがかなりあるようです。しかし、私はSharedPreferencesの使用に関するいくつかの障害を打ちました。RobolectricのSharedPreferencesのテストデータを提供

私は

  1. 活動は、新しい/空のsharedPreferences

  2. 活動は、すでにその中にいくつかのデータとsharedPreferencesテスト・ケース1の場合

、期待してい見込ん2のテストケースを持っていますテストは期待どおりに合格していますので、すべてがうまくいっています:)

しかし、テストケース2では、Robolectricにいくつかの偽のデータを提供する良い方法を見つけることができないので、アクティビティはこの偽のデータにアクセスできます。

非常に一般的な使用例のように感じますが、どうやってそれを行うのかわかりません!

答えて

54

どのように見つけたか - 今すぐ明らかにそうだ!

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

これは、誰かが

:)を助けた希望
+1

1にテストするためのコードスニペットを使用します! (2つ目は完璧に動作します)。私はこれを使用して、テストモードで非同期タスクを蹴飛ばさないようにしています。これは、共有のprefsに "テストモード"のブール値を設定します。 – Jimmy

+0

ヒント:getSharedPreferencesを呼び出すテスト中のコードでは、アプリケーションコンテキストを使用していることを確認してください。そうでない場合、これは機能しません。 –

+1

@Jimmy私はむしろカスタムビルドの設定フィールドを使ってこれを達成したいと思う:http://michiganlabs.com/string-constants-generated-gradle-build-configurations – martyglaubitz

15

私が投票した受け入れられた回答は当然です。物事はあなたがその後、私の作品の通常

sharedPreferences.edit().putBoolean(
    activity.getString(R.string.pref_somepref), true).commit(); 
5

Robolectric 3.1 SNAPSHOTソリューションとしてプリファレンスを追加することができますRobolectric 3

SharedPreferences sharedPreferences = 
    RuntimeEnvironment.application.getSharedPreferences(
     "you_custom_pref_name", Context.MODE_PRIVATE); 

を使用している場合は、わずかに変更されました...そしてあなた

のために働くこと
Context context = RuntimeEnvironment.application.getApplicationContext(); 
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); 
    sharedPreferences.edit().putBoolean("useOnlyOnWifi", false).commit(); 

私は、これは私がたくさん助けただけで無線LAN

関連する問題