2010-05-04 12 views
9

Nous utilisons des stubs écrits à la main dans nos tests unitaires et j'explore la nécessité d'un cadre Mock comme EasyMock ou Mockito dans notre projet.Pourquoi avons-nous besoin de frameworks moqueurs comme Easymock, JMock ou Mockito?

Je ne trouve pas de raison impérieuse pour passer aux frameworks Mocking à partir de stubs écrits à la main.

Quelqu'un peut-il répondre s'il vous plaît pourquoi on opterait pour les cadres moqueurs quand ils font déjà des tests unitaires en utilisant mock/stubs écrit à la main.

Merci

+0

En outre, voir http://stackoverflow.com/questions/1717107/why-do-we-need-mocking-frameworks – Finglas

Répondre

2

j'ai commencé de la même manière (écrire raille à la main) et maintenant j'ai presque complètement basculé sur EasyMock.

Je trouve qu'utiliser EasyMock est généralement plus rapide et plus flexible.

Typiquement la toute première fois que j'ai besoin d'un simulacre, je peux l'avoir dans quelques lignes de code avec EasyMock, alors qu'à la main j'ai besoin d'implémenter l'interface nécessaire (assez bien, ça peut être IntelliJ), puis ajoutez le code nécessaire pour produire la réponse nécessaire et/ou pour détecter les effets des appels.

Fine, on pourrait dire, c'est un coût ponctuel seulement. La prochaine fois que je pourrai réutiliser la maquette écrite à la main, heureusement ... j'ai trouvé que ce n'est souvent pas le cas. Dans un autre test, je pourrais avoir besoin d'un simulacre de la même classe avec un comportement différent. Par exemple. différentes méthodes sont appelées, et/ou un résultat différent est attendu. Un cas particulier est lorsque le simulacre est censé lancer une exception dans un cas de test, mais pas dans un autre. Bien, je peux ajouter quelques paramètres qui contrôlent le comportement de manière dynamique. Puis pour le prochain test, d'autres paramètres pour contrôler plus de comportements ... donc je me retrouve avec une implémentation fictive de plus en plus compliquée, qui est une dépendance pour des tests unitaires de plus en plus - posant aussi un risque de briser par inadvertance des tests plus anciens. Par contre, avec EasyMock, je peux configurer mes modèles indépendamment pour chaque test. Ainsi, le comportement est explicitement contrôlé et visible dans le code de test unitaire, et il n'y a aucun risque d'effets secondaires. Sans oublier qu'avec EasyMock vous pouvez vérifier que les méthodes requises sont appelées dans l'ordre requis, si vous le souhaitez (et je le fais, de temps en temps). La mise en œuvre à la main (surtout de manière générique) serait assez douloureuse dans le cou, sans aucun avantage supplémentaire.

1

Parfois, il peut être plus facile de créer des mocks de manière déclarative et cela peut vous aider à écrire certaines sortes de comportements plus facilement en utilisant le framework qu'à la main. Un autre petit avantage pourrait aussi être qu'en utilisant le cadre moqueur, vous êtes explicite au sujet de la moquerie.

2

Comme tous les autres développeurs, je me retrouve à écrire du code au lieu d'utiliser la solution existante - le syndrome «pas inventé ici».

Votre question suggère que vous préférez écrire les classes dont vous avez besoin pour simuler/simuler deux fois au lieu d'utiliser un cadre qui ferait cela pour vous. L'utilisation d'un cadre de moquerie vous libère de l'obligation d'écrire, de refactoriser et de mettre à jour vos mockés à la main chaque fois que vous changez l'objet falsifié. En d'autres termes, l'utilisation d'un cadre de simulation est similaire à n'importe quelle autre bibliothèque tierce, par ex. ORM - quelqu'un d'autre a écrit le code pour que vous n'ayez pas à le faire.

9

Vous voudrez peut-être lire l'article Mocks Aren't Stubs de Martin Fowler.La différence fondamentale est la suivante:

  • emploi est un stub est de retourner des résultats connus à tous les appels
  • Une maquette prévoit en outre des appels à venir dans un ordre spécifique, avec des paramètres spécifiques, et lancera une exception lorsque ces attentes ne sont pas rencontrés.

Il existe une condition d'erreur qui ne peut pas être testée avec des stubs. D'un autre côté, les tests utilisant des simulacres sont souvent beaucoup moins stables.

Alors que les stubs peuvent être écrits manuellement avec un effort raisonnable, Mocks nécessiterait beaucoup plus de travail. Et un bon cadre moqueur peut rendre les talons d'écriture plus rapides et plus faciles aussi bien.

+0

Petit point, l'article de Martin devient un peu vieux maintenant et manque quelques points critiques. Premièrement, je ne pense pas que les cadres actuels imposent l'ordre d'invocation à moins que vous ne le demandiez.Deuxièmement, si vos tests sont instables, c'est une rétroaction utile qui devrait vous donner un autre regard sur votre conception. –

13

La réponse simple est nous ne pas besoin d'eux.

Nous n'avons pas non plus besoin d'autres frameworks existants, mais l'utilisation de frameworks Mocking simplifie nos vies . En tant que développeurs, nous pouvons passer plus de temps sur le problème en question, plutôt que de créer ou de réaliser ce que les frameworks moqueurs peuvent faire.

« Je ne trouve pas une raison impérieuse pour passer à des cadres de moqueurs talons écrits main. »

J'étais exactement la même chose. Pourquoi devrais-je prendre la peine d'apprendre un cadre moqueur? Les talons écrits à la main vont bien. Quelques points viennent à l'esprit, principalement le fait qu'après un certain temps vos tests deviennent obscurs avec les talons de test. Ce que vous faites référence à l'utilisation de stubs écrits à la main sont connus comme des extensions de test. Vous étendez le code pour activer ce que les frameworks moqueurs font. En d'autres termes, vous écrivez du code sur stub, ou renvoyez des valeurs en fonction de ce qui se passe. Cela prend du temps et de l'effort. Sans parler de l'espace. Un cadre moqueur peut tout faire en termes de lignes.

Les avantages d'un cadre moqueur sont:

  • plus facile (subjective, mais après un certain temps vous ne serez pas écrire des implémentations écrites à la main)
  • moins de code (cadres vous permettent de créer une maquette en quelques lignes, plutôt que des déclarations complètes de classe)
  • suit SEC (vous ne finissent par répéter les implémentations fausses)

Le plus grand avantage vient quand vous avez besoin d'objets simulés. Avoir à écrire à la main du code pour vérifier si une méthode a été appelée, combien de fois et ainsi de suite est une mini-tâche en soi. Si quelqu'un d'autre a fait ainsi, et a créé un cadre bien documenté et bien documenté, il ne serait pas logique de ne pas l'utiliser. Tout comme n'importe quel cadre, vous pouvez vous débrouiller sans lui, mais parfois, en utilisant le bon outil, cela facilite grandement le travail.

+1

Comme mentionné, il est intéressant de vérifier l'article * "Mocks are stubs" *. Les cadres de moquerie permettent de se moquer, de céder et de truquer. En d'autres termes, ils sont très polyvalents. – Finglas