为Robolectric提供SharedPreferences的测试数据

时间:2012-03-17 08:20:19

标签: java android android-testing robolectric

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

我有两个测试用例

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

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

  3. 对于测试用例1,测试按预期传递,所以所有好处:)

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

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

4 个答案:

答案 0 :(得分:57)

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

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

我所投票的已接受答案当然是正确的。如果您使用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 :(得分:8)

Robolectric 3.1 SNAPSHOT解决方案适用于我......并且可能适合您

def check(self, A, B):
   if ( A.X == True and B.Y == True):
      #perform something. for example
      print 'performing'

我使用这段代码只测试wifi

答案 3 :(得分:1)

{ "invoice" : [ { "DOCUMENT_HEADER_ID" : "29120", "Descrizione" : "GAS", "PrezzoTotale" : "8.51" }, { "DOCUMENT_HEADER_ID" : "29120", "Descrizione" : "IMPOSTE", "PrezzoTotale" : "7.25" }, ... ] } 使用robolectric:4.0.2