2010-05-04 9 views
1

Lorsque j'utilise Easymock (ou un cadre de simulation similaire) pour mettre en œuvre mes tests unitaires, je suis obligé de faire des tests basés sur l'interaction (comme je ne peux pas affirmer sur l'état de mes dépendances.).Quand est-il approprié de faire des tests sur la base d'interaction par opposition à dire les tests basés?

D'autre part, si j'utilise un bout écrit à la main (au lieu d'utiliser easymock) Je peux mettre en œuvre des tests basés sur l'État.

Je suis tout à fait difficile de savoir si je veux aller avec des tests à base d'interaction ou tests basés sur l'état.

je suis partial et je veux utiliser easymock, mais je ne sais pas s'il y aurait des effets secondaires que je pourrais avoir à faire face à l'avenir.

Quelqu'un peut-il s'il vous plaît jeter un peu de lumière à ce sujet?

Merci d'avance!

Répondre

0

Je dirais que concept tests unitaires est surfaite. J'aime beaucoup l'idée des tests automatisés, mais je n'aime pas l'exigence artificielle selon laquelle vous ne devez tester qu'une seule unité et non un système/sous-système dans son ensemble. Cela dit, vous devriez tester l'interaction lorsque l'objet est construit de manière inhérente pour interagir avec cette dépendance via l'interface et il est quasiment certain qu'il existe/sera différentes implémentations de cette interface. Dans ce cas, vous voulez vraiment supprimer les détails d'implémentation de l'implémentation d'une interface particulière. Cependant, s'il y a une interface, mais seulement "juste en cas d'expansion future" - c'est-à-dire quand il n'y a pas de seconde implémentation dans un avenir prévisible, je dirais qu'il est bon de tester l'objet avec le seul existant implémentation de dépendances. Un effort supplémentaire requis pour se moquer correctement de l'interface donnera probablement plus de bugs que d'avantages.

0

Il n'y a aucune raison que vous ne pouvez pas faire les deux. Je trouve que le test basé sur le comportement ou basé sur l'interaction, en utilisant des mocks, permet d'économiser beaucoup de données quand tout ce que vous voulez faire est de tester le comportement. Avec les stubs écrits à la main, vous vous retrouvez avec beaucoup de booléens indiquant qu'une méthode a été appelée que vous devez ensuite tester. C'est redondant, fragile et tout à fait un frein.

D'autre part, vous voulez parfois tester l'état. Par exemple, si le comportement de l'objet sous test doit changer en fonction de l'état du candidat pour se moquer ou faire du talonnage, et qu'il y a une interaction complexe à résoudre.

Dans ce cas, les cadres peuvent se moquant obtenir de la manière, et un talon écrit à la main facilite la gestion de l'état beaucoup plus facile pour les besoins du test.

Ainsi, le fond est qu'ils ne sont pas mutuellement exclusifs - utiliser ce qui fait sens pour un test donné. Tant que chaque test est petit et ne teste qu'une seule chose (autant que raisonnable), alors vous ne devriez pas vous retrouver dans une situation où vous avez commencé avec un simulacre et vous devez soudainement faire un tas d'efforts pour récupérer les choses. à un talon.

4

Vous devez diviser vos objets en objets de valeur (qui détiennent le domaine Y état et doit être immuable) et des services. Les services sont les choses que d'autres objets devraient demander pour effectuer une tâche particulière, mais votre code ne devrait pas se préoccuper de la façon dont cette tâche est effectuée. Pour tester le service en isolation sans tester ses pairs, utilisez un simulacre.

objets de valeur, qui peuvent contenir des fonctionnalités de domaine tels que des calculs, ne doivent jamais être moquaient, parce que leur responsabilité est calculait et non déléguer.

Dans un système bien conçu, les services devraient toujours être injecté et ne sont jamais revenus d'autres services, si d'une manière générale, se moque de ne pas retourner se moque.

Questions connexes