web-dev-qa-db-fra.com

Quelle est la différence entre les frameworks PowerMock, EasyMock et Mockito?

Je suis très nouveau dans le framework de simulation et mon travail a besoin d'un framework de simulation pour terminer les tests unitaires. Dans la base de code actuelle, j'ai pu voir ci-dessus que 3 cadres sont utilisés à différents endroits pour les tests unitaires. Alors, lequel dois-je choisir dans les 3 cadres ci-dessus?

15
keya

Je vous donne une explication que d'autres personnes n'aimeront probablement pas, mais je (et beaucoup de gens à qui je l'ai mentionné) trouve/trouvé très utile: PowerMock est le cadre moqueur ... que vous feriez mieux de ne pas utiliser.

Le principal avantage de PowerMock est que vous pouvez l'utiliser pour tester certaines constructions (par exemple statique invocations de méthode) que EasyMock ne peut pas simuler. Ainsi: lorsque vous souhaitez tester du code tiers que vous ne pouvez pas modifier; et qui contient des appels statiques; alors vous pourriez vous tourner vers PowerMock.

Mais lorsque vous écrivez votre propre code et que vous vous concentrez sur écrire du code testable ; alors vous constaterez que le "besoin d'utiliser PowerMock" est absolument égal à "vous avez mal fait la conception de votre code". Utiliser statique par exemple conduit directement à couplage direct entre vos classes; et donc il est difficile de s'en débarrasser une fois dedans.

Ne vous méprenez pas - PowerMock a sa place dans les tests; mais ses puissantes fonctionnalités ont un coût certain.

Sur EasyMock/Mockito: principalement "deux manières différentes" d'écrire des cas de test; le dernier conduit à des tests que beaucoup de gens trouvent plus faciles à lire; tandis qu'EasyMock et les simulations "strictes" permettent de noter des cas de test qui se briseront rapidement lors de la plupart des changements dans votre code de production (ce qui en soi peut être très utile, ou très ennuyeux).

32
GhostCat

Ici vous pouvez trouver une comparaison entre Mockito et EasyMock:

Différences

  • Pas de modes d'enregistrement/relecture - pas besoin d'eux. Il n'y a que 2 choses que vous pouvez faire avec les maquettes Mockito - vérifier ou tronquer. Le stubbing va avant l'exécution et la vérification après.

  • Tous les simulacres sont agréables (encore plus agréables, car les méthodes de retour de collection retournent des collections vides au lieu de null). Même si les simulacres sont agréables, vous pouvez les vérifier aussi strictement que vous le souhaitez et détecter toute interaction indésirable.

  • Langage explicite pour une meilleure lisibilité: vérifier () et quand () VS le mélange de expect (mock.foo ()) et mock.foo () (appel de méthode simple sans attendre). Je suis sûr que certains d'entre vous trouveront cet argument subjectif :)

  • Modèle de stubbing simplifié - les méthodes stubbed sont rejouées tout le temps avec une valeur stubbed quel que soit le nombre de fois où elles sont appelées. Fonctionne exactement comme EasyMock etStubReturn () etStubThrow (). En outre, vous pouvez stub avec différentes valeurs de retour pour différents arguments (comme dans EasyMock).

  • La vérification des méthodes tronquées est facultative car il est généralement plus important de tester si la valeur tronquée est utilisée correctement plutôt que d'où elle vient.

  • La vérification est explicite - les erreurs de vérification pointent sur la ligne de code indiquant quelle interaction a échoué.

  • La vérification dans l'ordre est flexible et ne nécessite pas de vérifier chaque interaction.

  • Les comparateurs d'arguments personnalisés utilisent des comparateurs hamcrest, vous pouvez donc utiliser vos comparateurs hamcrest existants. (EasyMock peut également s'intégrer à Hamcrest bien qu'il ne fasse pas partie d'EasyMock mais de Hamcrest. Voir la documentation de Hamcrest).

PowerMock est une extension d'autres frameworks Mocking comme Mockito ou EasyMock qui est livré avec des capacités plus puissantes. Cela signifie que vous pouvez combiner Mockito/EasyMock et PowerMock dans le même test unitaire.

Personnellement, j'utilise Mockito pour tester une grande partie de mon code et PowerMock uniquement dans du code qui a besoin de ses fonctionnalités supplémentaires pour tester des méthodes statiques.

4
Julieta

Si vous contrôlez votre conception et que vous devriez être d'accord avec Mockito. Par exemple, PowerMock vous permet de vous moquer d'un membre privé qui semble cool, mais n'est pas nécessaire si vous refactorisez ce membre privé à un paramètre fourni via l'injection de dépendances.

2
Florin Grigoriu