L'Expresso n'attend pas la remise du message, ce qui fait que l'interface n'est pas mise à jour avant que les affirmations de l'action ne soient effectuées. Comment le forcer à attendre?Comment attendre que BroadcastReceiver reçoive le message dans un test Expresso
0
A
Répondre
1
Il semble qu'il n'y ait aucun moyen de forcer express à attendre dans ce cas, ou du moins, je pourrais le trouver. La solution que j'ai trouvée est d'envoyer des messages synchrones en utilisant la méthode sendBroadcastSync
au lieu de sendBroadcast
. Pour éviter le code malodorant, j'ai enveloppé le LocalBroadcastManager dans une abstraction et remplacé le wrapper par une version simulée de celui-ci dans le test, de sorte qu'il peut avoir un comportement différent pour le test.
Je suis arrivé à la même conclusion. Je faisais des tests d'instrumentation et j'utilisais Mockito pour espionner le 'BroadcastReceiver' et capturer le' Intent 'passé dans la méthode 'onReceive' et vérifier - cela fonctionne, mais je pense que cela devrait être plus facile, ou du moins une norme-cadre façon de tester. –
Je pense que le problème est de savoir comment le framework de test est design. Il tient sur le principe que lorsque le thread est à l'état inactif, l'application atteint un état final. Les appels asynchrones comme la diffusion peuvent mettre le thread en veille avant que l'application complète ne réagisse au test de stimulation – ByteArtisan