Je dois utiliser l'outil de test automatisé de l'interface utilisateur et je ne comprends pas comment utiliser Robotium ou Google Espresso.
Quelles sont les principales différences entre les deux? Existe-t-il des fonctionnalités dans l'une mais pas dans l'autre?
Réponses:
Divulgation complète: je suis l'un des auteurs d'Espresso.
Espresso et Robotium sont des frameworks basés sur l'instrumentation, ce qui signifie qu'ils utilisent Android Instrumentation pour inspecter et interagir avec les activités testées.
Chez Google, nous avons commencé par utiliser Robotium car il était plus pratique que l'instrumentation standard (chapeau aux développeurs Robotium pour l'avoir fait). Cependant, cela ne répondait pas à notre besoin d'un framework facilitant l' écriture de tests fiables pour les développeurs.
Les avancées majeures de l'Espresso par rapport au Robotium:
Synchronisation. Par défaut, la logique de test d'instrumentation s'exécute sur un thread (d'instrumentation) différent des opérations d'interface utilisateur (traitées sur le thread d'interface utilisateur). Sans synchronisation des opérations de test avec les mises à jour de l'interface utilisateur, les tests seront sujets à la fragilité - c'est-à-dire échoueront de manière aléatoire en raison de problèmes de synchronisation. La plupart des auteurs de tests ignorent ce fait, certains ajoutent des mécanismes de veille / nouvelle tentative et encore moins implémentent un code de sécurité des threads plus sophistiqué. Aucun de ceux-ci n'est idéal. Espresso prend en charge la sécurité des threads en synchronisant de manière transparente les actions de test et les assertions avec l'interface utilisateur de l'application testée. Robotium tente de résoudre ce problème avec des mécanismes de veille / nouvelle tentative, qui non seulement ne sont pas fiables, mais entraînent également des tests plus lents que nécessaire.
API. Espresso a une petite API bien définie et prévisible, qui est ouverte à la personnalisation. Vous indiquez au framework comment localiser un élément d'interface utilisateur à l'aide de correspondeurs hamcrest standard, puis vous lui demandez d'exécuter une action ou de vérifier une assertion sur l'élément cible. Vous pouvez comparer cela avec l'API de Robotium, où l'auteur du test doit choisir parmi plus de 30 méthodes de clic. De plus, Robotium expose des méthodes dangereuses comme getCurrentActivity (que signifie le courant de toute façon?) Et getView, qui vous permettent d'opérer sur des objets en dehors du thread principal (voir le point ci-dessus).
Effacer les informations d'échec. Espresso s'efforce de fournir des informations de débogage riches en cas de panne. De plus, vous pouvez personnaliser la façon dont les échecs sont gérés par Espresso avec votre propre gestionnaire de pannes. Je ne l'ai pas essayé depuis un moment, mais les versions précédentes de Robotium souffraient d'une gestion des échecs incohérente (par exemple, la méthode clickOnView avalerait SecurityExceptions).
Contrairement à une réponse précédente, Espresso est pris en charge sur toutes les versions d'API avec un nombre important d'utilisateurs (voir: http://developer.android.com/about/dashboards/index.html ). Cela fonctionne sur certaines des anciennes versions, mais les tester serait un gaspillage de ressources. En parlant de tests ... Espresso est testé à chaque changement par une suite de tests complète (avec plus de 95% de couverture) ainsi que la majorité des applications Android développées par Google.
la source
Espresso est beaucoup plus rapide que Robotium, mais ne fonctionne que sur certaines versions du SDK.
Donc, si vous voulez un test qui fonctionne sur tous les appareils, optez pour Roboitum. Sinon, optez pour l'espresso et n'oubliez pas que vous serez un bêta-testeur pendant encore un certain temps.
la source