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
Die Aktivität erwartet neue/leere sharedPreferences
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!
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 :)
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();
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
robolectric:4.0.2
verwenden
val context = ApplicationProvider.getApplicationContext<YourApplication>()
PreferenceManager.getDefaultSharedPreferences(context)