2017-05-08 6 views
0

Un de mes tests Espresso semble échouer car une intention de diffusion déclenchée par le test précédent arrive en cours de test. À ce stade, l'application est dans un état incohérent et manque certains SharedPreferences qui sont attendus par le gestionnaire d'intention.Effacer les intentions entre les tests d'instrumentation

Y at-il un moyen de s'assurer que toutes les intentions en attente ont été traitées ou annulées avant de commencer un test Espresso?

Répondre

0

Je ne pense pas qu'il existe un moyen d'effacer les intentions qui sont déjà distribuées. Cependant, vous pouvez contourner cela en peaufinant votre "test précédent".

Si vous voulez profiter pleinement d'Espresso, vous devez réduire la portée de votre test aussi petit que possible. Ainsi, au lieu de diffuser une intention et de vérifier ce qui se passe ensuite, essayez de faire tomber vos intentions.

Utilisation IntentsTestRule au lieu de ActivityTestRule et bouchonner toutes les intentions internes (parfois même les plus externes) en utilisant le code ci-dessous:

intending(isInternal()).respondWith(new Instrumentation.ActivityResult(Activity.RESULT_OK, null)); 

maintenant dans votre « test précédent », vérifier si l'intention droite se diffusé en utilisant quelque chose comme:

intended(hasComponent("com.example.something.SomeActivity"));

De cette façon, vous pouvez tester votre fonctionnalité sans réellement diffuser toutes les intentions. Je termine toujours mes intentions internes et externes et vérifie si la bonne intention se déclenche dans tous mes tests. De cette façon, l'activité suivante ne démarre pas et mes tests Espresso sont plus rapides et plus stables. Assurez-vous toujours de ne tester que ce que vous voulez tester, et gardez la portée vraiment petite.

En savoir plus: https://google.github.io/android-testing-support-library/docs/espresso/intents/

+0

Merci, grande réponse et semble que ce sera vraiment utile si je veux tester plus précisément les intentions. Dans mon cas, cependant, les intentions sont déclenchées dans les gestionnaires de clic des éléments de l'interface utilisateur. Je n'essaie pas de tester les intentions elles-mêmes, mais elles déclenchent à leur tour des mises à jour de l'interface utilisateur. Je vais réfléchir si le code peut être mieux isolé. – Armand

+0

Même dans ce cas, je vous suggère de remplacer les intentions. Si l '"intention diffusée" est un effet secondaire des "gestionnaires de clic", il est prudent de sauvegarder les intentions et de vérifier les mises à jour de votre interface utilisateur. Si votre «intention diffusée» est à l'origine des mises à jour de l'interface utilisateur, vous devez diviser votre test en deux. Premier cas de test: tester si le clic sur le gestionnaire de clic déclenche l'intention requise. Deuxième cas de test: lancez votre activité avec «l'intention diffusée» et vérifiez les mises à jour de l'interface utilisateur. – Henry