Quelles sont les différences entre les simulacres et les stubs sur Rhino Mocks?

Je n’ai pas assez joué avec ça et je me sers généralement de mock, mais je me demande quelles sont les différences entre ces deux là et quand utiliser l’un ou l’autre sur Rhino Mocks.

Mettre à jour:

J’ai également trouvé la réponse à ma question dans les mots d’Ayende :

La différence entre les talons et les mocks

Vous pouvez obtenir la définition réelle de ces termes dans cet article: Mocks Ar’t Stubs . Je veux me concentrer sur la différence du sharepoint vue de Rhino Mocks.

Un simulacre est un object sur lequel nous pouvons définir des attentes et qui vérifiera que les actions attendues ont bien eu lieu. Un stub est un object que vous utilisez pour passer au code sous test. Vous pouvez définir des attentes à ce sujet, de sorte qu’il agisse de certaines manières, mais ces attentes ne seront jamais vérifiées. Les propriétés d’un stub se comportent automatiquement comme des propriétés normales, et vous ne pouvez pas définir des attentes à leur sujet.

Si vous souhaitez vérifier le comportement du code en cours de test, vous utiliserez un simulacre avec les attentes appropriées et vous le vérifierez. Si vous voulez simplement passer une valeur qui peut avoir besoin d’agir d’une certaine manière, mais n’est pas l’object de ce test, vous utiliserez un stub.

IMPORTANT: un talon ne fera jamais échouer un test.

    Selon cela

    … Dit simplement, il y a une différence entre les objects Mock et Stub et RhinoMocks reconnaît que cela nous permet d’écrire des tests qui décrivent mieux leur objective.

    Les objects fictifs sont utilisés pour définir les attentes, à savoir: Dans ce scénario, je m’attends à ce que la méthode A () soit appelée avec tel ou tel paramètre. Mocks enregistrer et vérifier ces attentes.

    Les stubs, en revanche, ont un objective différent: ils n’enregistrent pas ou ne vérifient pas les attentes, mais nous permettent plutôt de «remplacer» le comportement, l’état du «faux» object afin d’utiliser un scénario de test …

    En général, l’unité teste les fonctions et les méthodes d’appel, puis vérifie si le comportement attendu s’est produit. Ces fonctions et méthodes peuvent nécessiter des parameters. Nous utilisons des stubs et des mocks pour satisfaire ces parameters. On peut parfois aussi se moquer des objects globaux.

    Bouchons

    Un Stub est un object minuscule que votre test peut utiliser comme paramètre pour faire fonctionner l’appel de fonction. Cela nous permet de vérifier le comportement de la fonction sous test. Cela ne nous permet pas de vérifier les effets secondaires, car le stub n’a aucune implémentation.

    Mock

    Un Mock est un stub avec une implémentation. Si notre fonction sous test interagit avec notre object simulé, nous pouvons vérifier que le modèle a été interagi comme prévu.

    Par exemple, disons que nous avions un object utilisateur fictif et que nous voulions vérifier que notre méthode session.login fonctionnait, nous pourrions vouloir vérifier que user.lastLoggedIn a été défini. Nous pourrions créer un utilisateur simulé qui implémente cette méthode. Lorsque nous appelons session.login, nous pouvons affirmer que user.lastLoggedIn a l’état attendu.

    Pour résumer

    Un simulacre est un stub avec une implémentation, ce qui nous permet de tester les effets secondaires.

    Cette différence est-elle toujours importante?

    Plutôt comme la différence entre les comparaisons et les métaphores, la différence entre les talons et les simulacres est subtile et historique, et a peut-être plus à voir avec les différentes communautés et philosophies du monde des tests que toute différence technique majeure.

    Ils représentent des approches légèrement différentes des tests. Un simulacre peut être écrit comme un bout. Un talon peut généralement être étendu à un simulacre.

    Lequel devriez-vous utiliser?

    Vous constaterez peut-être que vous commencez à créer des stubs, puis plus tard vous constaterez que vous devez créer des masques complets pour certains de vos objects. Vous voudrez peut-être vous moquer de tout au fur et à mesure, ou vous voudrez peut-être simplement vous moquer si nécessaire.

    Différence entre Mock et stub: avec stub, vous corrigez l’entrée de votre test unitaire: ainsi, votre test unitaire n’affirme pas le stub et Stub en réécrivant l’implémentation d’une méthode pour corriger le comportement d’un object faux. avec Mock, vous corrigez la sortie de votre test unitaire: votre test unitaire fait donc une attente sur votre object Mocking en vérifiant l’interaction interne de votre object fictif.

    Dans le cas du framework Moq – la méthode d’installation est STUB où la méthode Verify est Mock

    Une chose que j’ai remarquée est que lorsque j’utilise MockRepository.GenerateMock, je dois définir explicitement les attentes sur un appel de méthode spécifique pour intercepter cet appel. Avec les stubs, il semble intercepter automatiquement toute méthode tant qu’elle est virtuelle.