Robolectric vs Android Framework de Test
Ne Robolectric clairement les avantages par rapport à Android Framework de Test ? J'ai lu les docs concernant à la fois les cadres, mais aussi loin que je peux voir, la seule claires prestations concernant Robolectric est qu'il tourne sur la JVM, plutôt que de la DalvikVM, le rendant plus rapide que Android cadre.
Existe-il d'autres avantages importants qui se démarquent ?
- Cela a été demandé il y a longtemps . le android framework de test mieux que robolectric {aujourd'hui 2017/06]?
Vous devez vous connecter pour publier un commentaire.
Mise à jour Apr-2015: Gradle construire des outils et Android Studio maintenant officiellement en charge les tests unitaires et de prévenir android.jar le fait de jeter des stub (pas de réelle mise en œuvre) erreur. Donc, oui, il est possible d'exécuter des tests sur la machine virtuelle Java, lorsque les talons sont bien moqué. Ses un début, mais n'est toujours pas comparable avec Robolectric du pouvoir. Il y a aussi une troisième alternative, faites Défiler vers le bas de cette réponse.
Maintenant, à propos de Robolectric :
Pros: ici sont quelques points sur la façon dont il s'est avéré utile dans de test:
Vous n'avez pas besoin d'exécuter un émulateur, de Sorte que vous pouvez tester quelques-uns des projets non de l'INTERFACE utilisateur de pièces sans exiger un émulateur ou un périphérique. Cela s'applique également à l'exécution des tests sur l'intégration continue/construire des serveurs, pas d'émulateur cas besoin d'être lancé.
Avec Android Studio, vous pouvez exécuter rapidement l'un particulier de la classe de test, lorsque vous travaillez sur la mise en œuvre pour satisfaire le cas de test. Vous pouvez déboguer que vous écrivez du code. C'est un énorme gain de productivité.
Peut faux presque tous liés android chose que les ombres des objets, même SQLite. De Plus, chaque ombre objet expose de nombreuses fonctions utiles qui leur normale android homologues n'offrent pas. Avec l'ombre de leurs homologues des android Objet, vous pouvez effectuer des vérifications internes ou appel à des méthodes spéciales.
Brille vraiment lors de l'essai de multi threaded code comme
AsyncTask
s,Loopers
etHandlers
etc. Vous pouvez faire une pause, d'avance rapide, de fil chenille arpenteuse, même thread principal. Excellent pour le Gestionnaire de rappel de test.JUnit 4 format pris en charge. Android est encore maintenant sur JUnit 3 dernière fois que j'ai vérifié.
Peut être combiné avec d'autres outils de test comme Mockito, Expresso etc etc.
Prend en charge se moquer de l'Activité de création d'instance
Robolectric.buildActivity()
et son contrôle par l'intermédiaire deActivityController
. Fragment/Afficher la manipulation fonctionne également sur cette maquette instances d'activité.Il y a maintenant fourni ajouter des modules que la couverture multi-dex, v4, de services, de cartes et de client http en tant que bien. Donc, c'est à présent facile de tester le code à l'aide de ces fonctions de la bibliothèque en tant que bien.
Contre: Où je l'ai trouvé pas très bon:
Robolectric excelle à l'aide de tests Unitaires, mais ne couvre pas toutes les fonctionnalités d'un périphérique réel ou l'émulateur peut offrir. Par exemple, les capteurs, gps, open-gl etc etc.
Vous aurez besoin d'un émulateur ou un périphérique réel lors de l'intégration ou de l'INTERFACE utilisateur de test, de sorte que les Activités et les services peuvent interagir avec full android de l'environnement (d'autres applications, comme l'utilisation de l'app appareil photo pour obtenir une image de votre application), pas limité. Ici, vous aurez besoin d'utiliser le test par défaut cadre, il dispose de fonctions de test de l'INTERFACE utilisateur ainsi.
JNI chargement ne semble pas être pris en charge. Donc le code natif de la dépendance ne peut pas être testé.
Maintenant, Robolectric a câblée dépendance sur google maps jar de travail. Et télécharger un autre android.jar de maven. Ainsi, le projet d'installation peut exiger un peu de bricolage. Mise à jour: depuis la v3, il semble tirer toutes les dépendances via Gradle sans beaucoup de bruit.
Plus récente Android outils de support de la couverture et de génération de rapports, etc, mais seulement lorsque les tests sont exécutés sur l'appareil. Donc, avec Robolectric vous aurez à créer des Gradle tâche (exécuter Jaococ) pour le faire pour vous. Mise à jour: Gradle de 2,9 + livré avec jacoco plugin.
Que les deux gradle et android outils de construction d'expédition sont les nouveaux construire des versions à un rythme rapide, stable Robolectric versions parfois commencez à avoir des problèmes avec le changement de construire de l'outillage. La plupart des problèmes typiques comprennent: sdk version incompatible, ne manifeste pas trouvé, construire des chemins de sortie de discordance, de ressources pas de chargement, de construire config etc. Certaines questions sont également liés à des bugs dans android outils. Parfois, vous pouvez même écrire votre propre test runner ou appliquer des solutions de rechange jusqu'à la prochaine version résout ces problèmes. Découvrez questions ouvertes et configurer des tests en conséquence.
Une autre alternative est tout simplement se moquer de choses sur votre propre, pas de cadres impliqués. Son "à la dure", mais la plupart de manière personnalisée. Sa plaine JUnit avec JMockit:
Ci-dessus n'est qu'une grossière et inline exemple. Vous pouvez en fait créer la bonne ré-utilisable classes (dire
FragmentTestHarness
) qui va prendre un composant (par exemple, uneFragment
) en cours de test et l'envelopper dans complètement isolé de l'environnement, de les préparer pour les tests.mocked
lien pointant vers un article sur les tests de dépistage de drogue?Partager ce que je fais...
Robolectric
Pour SQL, les activités de flux, pour ces objets qui avaient besoin de contexte.
JUnit4
pour l'api du module java pour s'assurer que les données sont de retour correctement.
Espresso
Pour la vérification de l'interface utilisateur s'affiche correctement.
Quand j'ai modifié api...je ne fonctionnera jUnit4.
Quand j'ai modifié la liaison de données entre l'api et l'INTERFACE utilisateur ou Sqlite, alors je ne courir Robolectric.
Quand j'ai modifié l'INTERFACE utilisateur je n'exécutez Espresso.
Parfois, je vais courir Robolectric et espresso ensemble, mais très rare.
Mais je vais courir tous avant de publier sur le play store.
Parce que je pense qu'il n'y a pas de réel avantage pour l'instant. Mais voir comment u l'utiliser pour accélérer votre produit de la qualité et de la vitesse de développement.
Corrigez-moi si je me trompe.
Le principal avantage de Robolectric est la vitesse. Tests unitaires avec Robolectric ne pas exiger l'exécution d'un émulateur ou un appareil pour exécuter les tests et sont donc beaucoup beaucoup plus rapide.
Vous pouvez toujours avoir une suite de tests d'intégration qui vont à l'encontre d'un périphérique réel, juste une beaucoup plus petite suite.
Vous utilisez Robolectric seulement dans le cas où vous besoin de se moquer ou de faux la Android cadre, par exemple, si vous avez besoin d'un contexte. Lors de l'utilisation de la Android Framework de Test vous devez exécuter essais Instrumentés pour ce qui est ultra lent.
Si vous écrivez vos tests pour eux de laisser exécuter fréquemment, par exemple, parce que vous suivez une approche tdd ce n'est pas une option. Donc dans ce cas Robolectric est très pratique.
De sorte que le principal avantage sur Robolectric est qu'il est beaucoup plus rapide que Espresso ou essais Instrumentés en général.
L'inconvénient est qu'il simule une Androïde à l'environnement qui vous devez être conscient de. Pour valider les problèmes du monde réel, une meilleure utilisation classique d'Android approche du Cadre.
Le meilleur est encore à écrire votre code dans une manière que vous pouvez unité de test et que vous n'avez pas besoin d'un contexte ou tout autre Android dépendances de cadre.
Robolectric est de s'intégrer dans le Android Framework de Test depuis le I/O de 2018 - découvrez plus au officiel Robolectric page et regarder cette vidéo des I/O de 2018