繁体   English   中英

为Robolectric提供SharedPreferences的测试数据

[英]Providing test data for SharedPreferences for Robolectric

刚刚开始使用Robolectric,它似乎是我所需要的。 但是,我在使用SharedPreferences方面遇到了一些障碍。

我有两个测试用例

  1. Activity需要一个新的/空的sharedPreferences

  2. Activity期望sharedPreferences中包含一些数据

对于测试用例1,测试按预期传递,所以很好:)

但是,对于测试用例2,我似乎无法找到一个很好的方法来为Robolectric提供一些假数据,因此Activity能够访问这些假数据。

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

发现了 - 现在看起来如此明显!

对于那些感兴趣的人,您只需获取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();

希望这有助于某人:)

我所投票的已接受的答案当然是正确的。 如果您使用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解决方案对我有用......并且可能适合您

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

我使用这段代码只测试wifi

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM