10
votes

InfondupedOpationExceptionException lors de l'appelant GesharedPreferences () à partir d'un test de l'unité

J'ai mis en œuvre un fournisseur de contenu qui récupère les données d'un service installé sur réseau. Le fournisseur de contenu prend les paramètres requis des préférences partagées (informations d'identification de l'utilisateur, nom de l'application, etc.) xxx pré>

i Utilisez le test de l'unité pour ce fournisseur de contenu: P>

java.lang.UnsupportedOperationException
   at android.test.mock.MockContext.getSharedPreferences(MockContext.java:127)
   at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:146)
   at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:146)
   at com.company.mobile.android.net.RemoteExecutor.retrieveCredentials(RemoteExecutor.java:171)
   at com.company.mobile.android.net.service.Adapter.executeSearch(Adapter.java:33)
   at com.company.mobile.android.provider.MyProvider.insert(MyProvider.java:167)
   at android.content.ContentProvider$Transport.insert(ContentProvider.java:174)
   ...


0 commentaires

3 Réponses :


6
votes

Vous devez injecter un contexte qui s'étend mockcontext en utilisant androidtesCase.setContext () et remplace au moins getpackagename () getSharedpreferences () Ensuite, la solution consiste à remplacer la configuration () ne pas appeler la super méthode. xxx

et ceci est resolverrenamingmockcontext : xxx


1 commentaires

Injecter le contexte est un problème principal. Je n'ai pas trouvé de moyen d'injecter le contexte



1
votes

Il suffit d'étendre androidtesCase au lieu de ProvidertestCase2 et utilisez getcontext ()


0 commentaires

0
votes

Vous pouvez refacturer votre fournisseur de contenu pour appuyer toutes les utilisations des préférences partagées dans une classe myHelper .

Le MyHelper MyHelper peut utiliser des préférences partagées beaucoup comme vous " Reblez-le maintenant et renvoie les valeurs dont vous avez besoin via des getters.

Pendant le test, vous pouvez injecter une implémentation spéciale myHelper , une utilisation qui n'utilise pas de préférences partagées. Peut-être que cela s'appelle testhelper il renvoie simplement des constantes définies par les tests.

par exemple, dans rechercheProvidertest : xxx


0 commentaires