web-dev-qa-db-fra.com

Android Automatisation de cas de test unitaire: bibliothèque robolectric vs Android Framework de test)

Vous vous demandez lequel est le meilleur choix pour écrire des cas de tests unitaires pour Android applications et bibliothèques: utiliser la bibliothèque Robolectric ou coller avec Android Framework de test. Je veux exécuter test suite sur la ligne de commande et souhaitez qu'il soit indépendant de la nécessité de configurer l'émulateur ou de laisser un périphérique attaché à la machine de génération. Est-ce que quelqu'un d'entre vous exécute une analyse comparative sur ces deux ou quelque chose de mieux? meilleure solution.

47
bianca

J'utilise un système à plusieurs niveaux, où je préfère les niveaux antérieurs, si possible:

  1. Tests unitaires purs. J'essaie de rendre autant de code que possible entièrement indépendant des API Android, puis j'utilise des tests unitaires "purs" qui peuvent s'exécuter sur n'importe quelle machine virtuelle Java. Ces tests sont les plus rapides et permettent de conserver le code qui n'a pas besoin d'être portable spécifique à Android.
  2. Tests unitaires sur support robotique. Là où mon code n'a que de petites dépendances sur Android APIs, qui peuvent être satisfaites par les ombres Robolectric, je le teste avec Robolectric. Il y a un peu plus de temps de configuration pour Robolectric par rapport aux tests purs, mais c'est encore plus rapide que de démarrer/exécuter sur un émulateur.
  3. Tests de framework Android. Là où Robolectric ne le coupe pas - soit parce que les ombres n'existent pas, soit parce que j'utilise beaucoup Android APIs (et que je veux donc tester par rapport à la vraie chose) - j'écris test qui s'exécutent sur l'émulateur/le périphérique avec le framework par défaut.

Le but des niveaux est de garder les choses aussi simples que possible, ce qui maintient la suite complète plus rapidement et aide à promouvoir un code plus propre.

97
Jason Sankey

J'ai travaillé sur les deux, ce que j'ai trouvé est: -

1) Robolectric ne supporte pas l'API 19, c'est mentionné dans son document - http://robolectric.org/Eclipse-quick-start/ . C'est un gros inconvénient.

2) Exécution robotique sur JVM et non sur DVM. Nous ne pouvons donc pas détecter qu'à ce moment précis, le GPS est activé dans l'appareil ou non, etc. Nous ne pouvons que transmettre notre valeur prédéterminée.

3) L'écriture de code en Robolectric est plus complexe que junit spécialement pour les fragments il y a beaucoup de complexité et de problèmes.

4) Robolectric a besoin d'un pot et d'une configuration externes et pour le test de junit, nous n'avons besoin d'aucune bibliothèque externe.

5) Robolectric est plus rapide car il fonctionne sur JVM mais cela a aussi un inconvénient, nous ne pouvons pas voir l'interface utilisateur sur notre appareil, quel code d'écran est en cours d'exécution.

Pour Android, j'aime le test jUnit.

11
Akanksha Rathore