有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为Robolectric的SharedReference提供测试数据

刚刚开始使用机器人分子,这似乎是我所需要的。然而,在使用SharedReference方面,我遇到了一些障碍

我有两个测试用例

  1. 活动需要新的/空的SharedReferences

  2. 活动要求共享数据引用,其中已包含一些数据

对于测试用例1,测试按预期通过,因此一切正常:)

然而,对于测试用例2,我似乎无法找到一个好方法来为Robolectric提供一些虚假数据,因此活动能够访问这些虚假数据

这感觉像是一个非常常见的用例,但我似乎不知道如何去做


共 (4) 个答案

  1. # 1 楼答案

    我投票赞成的公认答案当然是正确的。如果您使用的是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();
    
  2. # 2 楼答案

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

  3. # 3 楼答案

    适用于我的Robolectric 3.1快照解决方案。。。也许对你有用

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

    我只使用这段代码在wifi上进行测试

  4. # 4 楼答案

    发现了原因-现在看起来很明显

    对于那些感兴趣的人,您只需获取SharedReferences,并用所需的数据填充它

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

    如果您有一个自定义的SharedReferences,您应该能够做到这一点(还没有真正正确地进行测试,但也应该可以正常工作)

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

    希望这对某人有所帮助:)