webentwicklung-frage-antwort-db.com.de

Bereitstellung von Testdaten für SharedPreferences für Robolectric

Ich habe gerade angefangen, Robolectric zu verwenden, und es scheint so ziemlich das zu sein, was ich brauche. In Bezug auf die Verwendung von SharedPreferences bin ich jedoch ein wenig auf den Weg gebremst.

Ich habe zwei Testfälle

  1. Die Aktivität erwartet neue/leere sharedPreferences 

  2. Activity erwartet bereits SharedPreferences mit einigen Daten

Für Testfall 1 sind die Tests wie erwartet bestanden, also alle gut :)

Für Testfall 2 scheint es mir jedoch nicht klarzustellen, wie Robolectric einige gefälschte Daten zur Verfügung stellt, sodass die Aktivität auf diese gefälschten Daten zugreifen kann.

Es fühlt sich an wie ein sehr gewöhnlicher Anwendungsfall, aber ich scheine nicht herauszufinden, wie es geht!

47
pyko

Finden Sie heraus, wie es scheint - jetzt offensichtlich!

Für diejenigen, die daran interessiert sind, erhalten Sie einfach die sharedPreferences und füllen sie mit den erforderlichen Daten auf.

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

Wenn Sie über benutzerdefinierte SharedPreferences verfügen, sollten Sie dazu in der Lage sein (nicht wirklich getestet, sollten aber auch funktionieren)

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

Hoffe das hat jemandem geholfen :)

57
pyko

Die akzeptierte Antwort, die ich gewählt habe, ist natürlich richtig. Bei Verwendung von Robolectric 3 haben sich die Dinge geringfügig geändert

 SharedPreferences sharedPreferences =
     RuntimeEnvironment.application.getSharedPreferences(
         "you_custom_pref_name", Context.MODE_PRIVATE);

Sie können dann wie gewohnt eine Präferenz hinzufügen 

 sharedPreferences.edit().putBoolean(
    activity.getString(R.string.pref_somepref), true).commit();
18
e4c5

Robolectric 3.1 SNAPSHOT-Lösung, die für mich funktioniert ... und möglicherweise für Sie funktioniert

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

Ich verwende dieses Codefragment nur für das Testen von WLAN

8
Evan Parsons

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

1
shuabing