Android Guimauve: Test des autorisations avec l'Espresso?
Les nouvelles autorisations régime instauré par Android Guimauve nécessite une vérification pour les autorisations spécifiques au moment de l'exécution, ce qui implique la nécessité de fournir différents flux en fonction de si l'utilisateur refuse ou en permet l'accès.
Que nous utilisons Espresso pour exécuter automatisé de tester l'INTERFACE utilisateur de notre application, comment peut-on se moquer ou de mettre à jour l'état des autorisations afin de tester différents scénarios?
- Double Possible de Comment gérer l'Exécution des autorisations android guimauve espresso tests
- Essayer ce peut être vous aider:-stackoverflow.com/a/41221852/5488468
InformationsquelleAutor argenkiwi | 2015-11-26
Vous devez vous connecter pour publier un commentaire.
Avec la nouvelle version de la Android Tests Library 1.0, il y a un GrantPermissionRule que vous pouvez utiliser dans vos tests d'accorder une autorisation avant de commencer les tests.
Kotlin solution
@get:Rule
doit être utilisé afin d'éviterjava.lang.Exception: The @Rule 'permissionRule' must be public.
Plus d'infos ici.Accepté la réponse ne fait pas de test de la boîte de dialogue autorisations; c'est juste que il contourne. Donc, si la boîte de dialogue autorisations échoue pour une raison quelconque, votre test donnera un faux vert. J'encourage en fait en cliquant sur le "donner" autorisations de bouton pour tester l'ensemble de l'application des comportements.
Jetez un oeil à cette solution:
Trouver l'ensemble de la classe ici: https://gist.github.com/rocboronat/65b1187a9fca9eabfebb5121d818a3c4
Par ailleurs, que cette réponse a été un populaire, nous avons ajouté
PermissionGranter
à Barista, notre outil ci-dessus Espresso et UiAutomator de faire instrumental tests vert: https://github.com/SchibstedSpain/Barista le vérifier, parce que nous le maintiendrons version par version.Donner un essai avec une telle méthode statique lorsque votre téléphone est sur les paramètres régionaux anglais:
Je l'ai trouvé ici
Vous pouvez accorder des autorisations avant le test est exécuté avec quelque chose comme:
Mais vous ne pouvez pas annuler. Si vous essayez
pm reset-permissions
oupm revoke...
le processus est tué.@org.junit.AfterClass
ou@org.junit.BeforeClass
annotationsEn fait il y a 2 façons de le faire je sais:
adb shell pm grant "com.your.package" android.permission.your_permission
adb shell
de commande avec notre suite de test. Et de cliquer sur le dialogue, l'Espresso doit être capable de gérer lui-même. Le problème est, après l'exécution de l'essai, et l'autorisation est activée, la prochaine fois que vous exécutez le test échouera car le réglage est conservé et la boîte de dialogue de ne pas s'afficher à nouveau.Vous pouvez atteindre facilement par l'octroi de l'autorisation avant de commencer le test. Par exemple si vous êtes censé utiliser l'appareil pendant le test, vous pouvez accorder l'autorisation comme suit
ESPRESSO MISE À JOUR
et gradle
référence: https://www.kotlindevelopment.com/runtime-permissions-espresso-done-right/
Je sais qu'une réponse a été acceptée, cependant, au lieu de la
if
déclaration qui a été proposé maintes et maintes fois, l'autre, plus élégant approche serait de faire ce qui suit dans le test réel que vous voulez pour une version spécifique de l'OS:Si le
assumeTrue
fonction est appelée avec une expression correspondant à false, le test s'arrête et être ignoré, qui je suppose est ce que vous voulez dans le cas où le test est exécuté sur un dispositif de pré SDK 23.J'ai mis en place une solution qui tire parti des classes wrapper, le remplacement et établir la variante de configuration. La solution est assez long à expliquer et se trouve ici: https://github.com/ahasbini/AndroidTestMockPermissionUtils.
Il n'est pas encore emballé dans un sdk mais l'idée principale est de remplacer les fonctionnalités de
ContextWrapper.checkSelfPermission
etActivityCompat.requestPermissions
être manipulés et retour moqué résultats de tromper l'application dans les différents scénarios testés comme: l'autorisation a été refusée par conséquent, l'application a demandé et s'est terminée avec la permission. Ce scénario va se produire même si l'application avait la permission de tout le long, mais l'idée est qu'il a été dupé par les raillé les résultats de la primauté de la mise en œuvre.En outre la mise en œuvre a un
TestRule
appeléPermissionRule
classe qui peut être utilisé dans les classes de test facilement simuler toutes les conditions de test les autorisations de façon transparente. Aussi les assertions peuvent être faites de s'assurer de l'application a appelérequestPermissions()
par exemple.Il est GrantPermissionRule dans Android Tests Bibliothèque de prise en charge, que vous pouvez utiliser dans vos tests d'accorder une autorisation avant de commencer les tests.
Merci @niklas pour la solution. Dans le cas où quelqu'un à la recherche d'accorder plusieurs autorisations en Java: