web-dev-qa-db-fra.com

Fourniture de données de test pour les références partagées pour Robolectric

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

  1. L'activité attend une nouvelle/vide PartagePreferences 

  2. 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!

47
pyko

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 :)

57
pyko

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();
18
e4c5

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

8
Evan Parsons

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

1
shuabing