为Robolectric的SharedPreferences提供testing数据

刚开始使用Robolectric,这似乎是我所需要的。 不过,就使用SharedPreferences而言,我遇到了一些障碍。

我有两个testing用例

  1. 活动期望新的/空的sharedPreferences

  2. 活动期望已经有一些数据的sharedPreferences

对于testing用例1,testing正在按预期方式通过,所以都好:)

然而,对于testing用例2,我似乎无法find一个给Robolectric提供一些伪造数据的好方法,所以活动能够访问这个假数据。

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

发现如何 – 现在似乎如此明显!

对于那些有兴趣的人,你只需要获得sharedPreferences,并填充所需的数据。

SharedPreferences sharedPreferences = ShadowPreferenceManager.getDefaultSharedPreferences(Robolectric.application.getApplicationContext()); sharedPreferences.edit().putString("testId", "12345").commit(); 

如果你有一个自定义的SharedPreferences,你应该能够做到这一点(没有真正的testing,但也应该工作)

 SharedPreferences sharedPreferences = Robolectric.application.getSharedPreferences("you_custom_pref_name", Context.MODE_PRIVATE); sharedPreferences.edit().putString("testId", "12345").commit(); 

希望这有助于某人:)

当然我接受的答案是正确的。 如果你使用的是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(); 

Robolectric 3.1 SNAPSHOT解决scheme适用于我…并可能为您工作

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

我使用这段代码仅用于testingWiFi