web-dev-qa-db-fra.com

Cas de tests unitaires avec JUnit + (Robolectric ou Mockito ou les deux dans Android)

C'est la première fois que je dois écrire des cas de tests unitaires dans Android.

J'ai donc cherché plein de choses.

  1. Robolectric framewordk - Fonctionne sur JVM
  2. Mockito Framwork - Objets moqueurs

J'ai donc des doutes sur Robolectric & Mokito.

  1. Dois-je utiliser Robolectric uniquement avec JUnit dans l'application Android?
  2. Dois-je utiliser Mockito uniquement avec JUnit dans l'application Android?
  3. Dois-je avoir à aller avec les deux cadres?
  4. Quelle est la différence entre Mockito et Robolectric?

J'ai recherché la différence entre Mokito et Robolectric mais je n'ai pas de réponse appropriée à cela.

Veuillez suggérer.

32

Ils ont des usages légèrement différents et j'ai tendance à utiliser les deux dans mes projets.

Mockito

est utilisé pour créer des simulations de vos classes .

Lorsque vous testez une classe particulière, vous vous moquez de toutes ses dépendances avec Mockito.

Dans la mesure du possible, la plupart de vos tests doivent utiliser mockito. Pour rendre cela possible, la plupart des gens divisent leur code en MVP, etc. où la logique métier est séparée de la logique View. De cette façon, votre logique métier (Presenter) n'a aucune connaissance (ou dépendances) sur la bibliothèque Android et n'a pas besoin d'en avoir une maquette).

Robolectric

est une bibliothèque qui contient de nombreuses simulations de classes Android .

Le lanceur de test Robolectric injecte ces "objets fantômes" à la place des classes Android réelles lorsque les tests sont exécutés. C'est ce qui permet aux tests de s'exécuter sur la JVM sans démarrer une instance d'Android .

Lorsque vous utilisez MVP, votre couche View a tendance à être implémentée par l'activité/le fragment et c'est là que vous pouvez utiliser Robolectric pour les simuler.

Notes

N'utilisez Robolectric que lorsque cela est nécessaire. Il réimplémente essentiellement des parties du framework Android mais pas toujours exactement de la même manière.

Vous pouvez également avoir besoin d'une autre bibliothèque telle que PowerMock. Cela permet de se moquer de classes statiques telles que Math ou peut être utilisé pour se moquer de classes statiques Android telles que TextUtils.

Les deux sont utilisés avec JUnit

42
Jahnold

Mockito seul peut couvrir la plupart des cas.

Cependant, Robolectric peut également fournir des opérations limitées sur Android Composant tel que l'activité ou le fragment dans Test unitaire (pas le test d'instrumentation, qui ne dépend pas de Android SDK), qui ne nécessite aucun émulateur ou appareil et est considérablement plus rapide que les tests d'instrumentation.

Ma suggestion: utilisez Mockito pour le test unitaire et Espresso pour le test de l'interface utilisateur, car ce sont des cadres de test semi-officiels pour Android.

Ajoutez Robolectric dans votre test unitaire s'il existe des dépendances sur Android SDK.

12
Eric Liu