Je n'ai pas assez joué à cela et je me sers généralement de simulacres, mais je me demande quelles sont les différences entre ces deux et quand utiliser l'un ou l'autre sur Rhino Mocks.
Mise à jour:
J'ai également trouvé la réponse à ma question dans mots d'Ayende :
La différence entre les talons et les imitations
Vous pouvez obtenir la définition réelle de ces termes dans cet article: Mocks Is not Stubs . Je souhaite mettre l’accent sur la différence du point de vue de Rhino Mocks.
Une maquette est un objet sur lequel nous pouvons définir des attentes et qui vérifiera que les actions attendues ont bien eu lieu. Un stub est un objet que vous utilisez pour passer au code sous test. Vous pouvez y définir des attentes, de sorte que cela agirait de certaines manières, mais ces attentes ne seront jamais vérifiées. Les propriétés d'un stub se comporteront automatiquement comme des propriétés normales et vous ne pouvez pas définir d'attentes à leur égard.
Si vous souhaitez vérifier le comportement du code sous test, vous utiliserez une simulation avec l'attente appropriée et vérifiez-la. Si vous voulez simplement passer une valeur qui peut avoir besoin d'agir d'une certaine manière, mais ne fait pas l'objet de ce test, vous utiliserez un talon.
IMPORTANT: Un stub ne fera jamais échouer un test.
Selon this
... En termes simples, il existe une différence entre les objets Mock et Stub et RhinoMocks reconnaît que cela nous permet d'écrire des tests qui indiquent mieux leur objectif.
Les objets fictifs sont utilisés pour définir les attentes, à savoir: Dans ce scénario, la méthode A() doit être appelée avec tel ou tel paramètre. Se moque de l'enregistrement et vérifie de telles attentes.
Les stubs, quant à eux, ont un objectif différent: ils n'enregistrent ni ne vérifient les attentes, mais nous permettent plutôt de "remplacer" le comportement, l'état de l'objet "faux" afin d'utiliser un scénario de test ...
D'une manière générale, les tests unitaires appellent des fonctions et des méthodes, puis vérifient si le comportement attendu a eu lieu. Ces fonctions et méthodes peuvent nécessiter des paramètres. Nous utilisons des stubs et des mocks pour satisfaire ces paramètres. Nous pouvons parfois aussi nous moquer des objets globaux.
Un module de remplacement est un faux objet factice que votre test peut utiliser comme paramètre pour que la fonction fonctionne. Cela nous permet de vérifier le comportement de la fonction testée. Cela ne nous permet pas de vérifier les effets secondaires, car le stub n'a aucune implémentation.
Une maquette est un bout avec une implémentation. Si notre fonction testée interagit avec notre objet fictif, nous pouvons vérifier que le fictif a bien été interagi comme prévu.
Par exemple, supposons que nous ayons un objet utilisateur fictif et que nous voulions vérifier que notre méthode session.login fonctionnait, nous pourrions également vérifier que user.lastLoggedIn était défini. Nous pourrions créer un utilisateur fictif qui implémente cette méthode. Lorsque nous appelons session.login, nous pouvons affirmer que user.lastLoggedIn a l'état que nous attendions.
Une maquette est un bout avec une implémentation, ce qui nous permet de tester les effets secondaires.
Tout comme la différence entre les comparaisons et les métaphores, la différence entre les talons et les répliques est subtile et historique, et a peut-être davantage à voir avec les différentes communautés et philosophies du monde expérimenté qu'avec toute différence technique majeure.
Ils représentent des approches de tests légèrement différentes. Une maquette peut être écrite comme un bout. Un talon peut généralement être développé dans une maquette.
Vous constaterez peut-être que vous commencez à créer des talons, puis que vous devrez peut-être créer des répliques complètes pour certains de vos objets. Vous voudrez peut-être vous moquer de tout au fur et à mesure, ou simplement vous moquer de vous si nécessaire.
Différence entre Mock et stub: avec stub, vous corrigez l’entrée de votre test unitaire: ainsi votre test unitaire ne fait pas d’affirmation sur stub et stub en réécrivant l’implémentation d’une méthode qui corrige le comportement du faux objet. avec Mock, vous corrigez la sortie de votre test unitaire: votre test unitaire attend donc votre objet Mocking en vérifiant l’interaction interne de celui-ci.
Dans le cas du framework Moq - la méthode d'installation est STUB, alors que la méthode Verify est simulée
Une chose que j'ai aussi remarquée est que lorsque j'utilise MockRepository.GenerateMock, je dois définir explicitement les attentes pour un appel de méthode spécifique afin d'intercepter cet appel. Avec les stubs, il semble intercepter automatiquement n'importe quelle méthode tant qu'elle est virtuelle.