Comment gérer l'Exécution des autorisations android guimauve espresso tests
Je suis en utilisant expresso pour des tests, mais parfois, j'essaie d'obtenir une image en forme de stockage externe et avec de la guimauve j'ai besoin d'un moteur d'Exécution de l'autorisation sinon, il y aura une Exception crash, et le test échouera.
androidTestCompile 'com.android.support.test:runner:0.4'
androidTestCompile 'com.android.support.test:rules:0.4'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'
androidTestCompile 'com.android.support.test.espresso:espresso-intents:2.2.1'
androidTestCompile('com.android.support.test.espresso:espresso-contrib:2.2.1') {
//this library uses the newest app compat v22 but the espresso contrib still v21.
//you have to specifically exclude the older versions of the contrib library or
//there will be some conflicts
exclude group: 'com.android.support', module: 'appcompat'
exclude group: 'com.android.support', module: 'support-v4'
exclude module: 'recyclerview-v7'
}
androidTestCompile 'junit:junit:4.12'
androidTestCompile 'com.squareup.retrofit:retrofit-mock:1.9.0'
androidTestCompile 'com.squareup.assertj:assertj-android:1.1.0'
androidTestCompile 'com.squareup.spoon:spoon-client:1.2.0'
comment puis-je gérer ce droit?
dois-je écrire de test pour l'Exécution des autorisations ou il y a un moyen de le désactiver pour tester?
dois-je donner les autorisations avant l'exécution des tests, comme elle le dit ici? https://www.youtube.com/watch?list=PLWz5rJ2EKKc-lJo_RGGXL2Psr8vVCTWjM&v=C8lUdPVSzDk
- Double Possible de Android Guimauve: Test des autorisations avec l'Espresso?
- dans ce cas, la question devrait être la copie de l'un, cela est plus âgé
- tout à fait d'accord, mais il me semble que l'autre a plus d'engagement de la communauté. Les réponses sont vraiment constructif. En outre, l'on a accepté la réponse à cette question ne permet pas de résoudre le problème... donc, pour moi, n'est pas en termes de "qui est arrivé le premier", mais "quelle question et les réponses sont plus utiles pour la communauté".
Vous devez vous connecter pour publier un commentaire.
Vous pouvez créer un Android gradle tâche d'accorder la permission:
Et c'est la commande à exécuter la tâche:
gradle grantDebugPermissions
Mise à JOUR! Maintenant, vous pouvez utiliser Une règle à partir d'Android Tests Bibliothèque de prise en charge
Il est plus convenable d'utiliser que des règles personnalisées.
Réponse dépassée:
Vous pouvez ajouter le test de la règle de la réutilisation de code et ajouter plus de flexibilité:
Après cela, vous pouvez utiliser cette règle dans vos classes de test:
Garder à l'esprit:
exécuté après que
executeShellCommand
dansallowPermissions
implique la synchronisation (la lecture du descripteur de fichier renvoyé d'un cours jusqu'à la fin). Sinon, le test peut commencer avant que les autorisations ont été effectivement appliquées. Et, en général, les descripteurs de fichier retourné parexecuteShellCommand
doit être fermé.revokePermissions()
devrait être dans unfinally
bloc pour être sûr.Vous pouvez accorder et révoquer des autorisations à l'aide de:
À l'utilisation de Java instrumentation tests d'appeler cette méthode à partir de Google échantillons:
https://github.com/googlesamples/android-testing/blob/ed62c450e43f859333b3113d44dd59f75971b529/ui/espresso/IntentsBasicSample/app/src/androidTest/java/com/example/android/testing/espresso/BasicSample/DialerActivityTest.java#L94
Vous pouvez utiliser GrantPermissionRule. Cette règle s'accorder à tous la demande d'exécution des autorisations pour toutes les méthodes de test dans le test de la classe.
spoon { grantAllPermissions = true }
pour permettre à tous par défautVous 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
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.
Dans le multi-saveur de l'installation, quel que soit votre instrumentation tâche est, disons
connectedYourFlavorDebugAndroidTest
, vous pouvez spécifier les autorisations que vous souhaitez avoir accordé avant les tests sont exécutés sur tous les appareils connectés:gradlew grantYourFlavorDebugPermissions -Ppermissions=android.permission.ACCESS_FINE_LOCATION,android.permission.ACCESS_COARSE_LOCATION
Voir sfjava de l'extrait de code ci-dessous à copier dans
build.gradle
pour générergrantYourFlavorDebugPermissions
tâcheJuste quelques Mises à jour mineures dans l'extrait ci-dessus ( accessoires riwnodennyk ) -- qui a très bien fonctionné pour moi lors de la construction contre SDK 24 et avec les outils de la version 24.0.0:
Si vous utilisez la dernière version com.android.de soutien.test.expresso:expresso-core:3.0.1 " bibliothèque pour l'espresso cela peut être fait en une seule ligne de code. Tout ce que vous devez faire est de simplement ajouter une règle dans la classe de Test, et continuez d'ajouter les autorisations dont vous avez besoin, comme les paramètres de la fonction de subvention de la fonction. Voir ci-dessous:
https://developer.android.com/reference/android/support/test/rule/GrantPermissionRule.html
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'a pas besoin de script à ajouter dans le système de compilation ou d'exécution avant d'exécuter les tests.
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.