为Robolectric的SharedPreferences提供testing数据
刚开始使用Robolectric,这似乎是我所需要的。 不过,就使用SharedPreferences而言,我遇到了一些障碍。
我有两个testing用例
-
活动期望新的/空的sharedPreferences
-
活动期望已经有一些数据的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