Je viens juste de commencer à utiliser Robolectric et cela semble être à peu près ce dont j'ai besoin. Cependant, j'ai rencontré quelques difficultés en ce qui concerne l'utilisation de SharedPreferences.
J'ai deux cas de tests
L'activité attend une nouvelle/vide PartagePreferences
L'activité attend déjà des préférences partagées avec certaines données
Pour le scénario de test 1, les tests réussissent comme prévu, donc tout va bien :)
Toutefois, pour le scénario de test 2, je ne parviens pas à trouver un moyen intéressant de fournir à Robolectric des données factices, de sorte que l’Activité puisse accéder à ces données factices.
Cela ressemble à un cas d'utilisation très courant, mais je n'arrive pas à comprendre comment le faire!
Découvrez comment - semble si évident maintenant!
Pour ceux qui sont intéressés, il vous suffit d’obtenir les préférences partagées et de les renseigner avec les données requises.
SharedPreferences sharedPreferences = ShadowPreferenceManager.getDefaultSharedPreferences(Robolectric.application.getApplicationContext());
sharedPreferences.edit().putString("testId", "12345").commit();
Si vous avez une référence partagée personnalisée, vous devriez pouvoir le faire (vous n'avez pas vraiment testé correctement, mais cela devrait également fonctionner).
SharedPreferences sharedPreferences = Robolectric.application.getSharedPreferences("you_custom_pref_name", Context.MODE_PRIVATE);
sharedPreferences.edit().putString("testId", "12345").commit();
J'espère que cela a aidé quelqu'un :)
La réponse acceptée que j'ai votée est juste, bien sûr. Les choses ont légèrement changé si vous utilisez Robolectric 3
SharedPreferences sharedPreferences =
RuntimeEnvironment.application.getSharedPreferences(
"you_custom_pref_name", Context.MODE_PRIVATE);
Vous pouvez ensuite ajouter une préférence comme d'habitude
sharedPreferences.edit().putBoolean(
activity.getString(R.string.pref_somepref), true).commit();
Robolectric 3.1 INSTANTANÉ solution qui fonctionne pour moi ... et peut travailler pour vous
Context context = RuntimeEnvironment.application.getApplicationContext();
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
sharedPreferences.edit().putBoolean("useOnlyOnWifi", false).commit();
J'utilise cet extrait de code pour tester uniquement en wifi
robolectric:4.0.2
utiliser
val context = ApplicationProvider.getApplicationContext<YourApplication>()
PreferenceManager.getDefaultSharedPreferences(context)