Je n'ai pas assez joué avec ça et j'utilise habituellement des simulations, mais je me demande quelles sont les différences entre ces deux 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 stubs et les mocks
Vous pouvez obtenir la définition réelle de ces termes dans cet article: Les mocks ne sont pas des stubs . Je veux me concentrer sur la différence du point de vue de Rhino Mocks.
Un simulacre est un objet sur lequel on peut fixer des attentes, et qui vérifiera que les actions attendues se sont bien produites. Un stub est un objet que vous utilisez pour passer au code sous test. Vous pouvez y définir des attentes, de sorte qu'il agirait 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 leur définir d'attentes.
Si vous souhaitez vérifier le comportement du code testé, vous utiliserez une simulation avec l'attente appropriée et vous le vérifierez. Si vous souhaitez simplement transmettre une valeur qui peut devoir agir d'une certaine manière, mais qui n'est pas l'objet de ce test, vous utiliserez un stub.
IMPORTANT: un stub n'entraînera jamais l'échec d'un test.
la source
Réponses:
Selon ceci
la source
De manière générale, les tests unitaires appellent des fonctions et des méthodes, puis vérifient si le comportement attendu s'est produit. Ces fonctions et méthodes peuvent nécessiter des paramètres. Nous utilisons des stubs et des simulacres pour satisfaire ces paramètres. On peut parfois aussi se moquer des objets globaux.
Bouts
Un stub est un petit objet faux 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 testée. Cela ne nous permet pas de vérifier les effets secondaires, car le stub n'a pas d'implémentation.
Mocks
Un Mock est un stub avec une implémentation. Si notre fonction testée interagit avec notre objet fictif, nous pouvons vérifier que la fausse a été interagie comme prévu.
Par exemple, supposons que nous ayons un objet User 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 que nous attendions.
Pour résumer
Une maquette est un stub avec une implémentation, qui nous permet de tester les effets secondaires.
Cette différence est-elle toujours importante?
Tout comme la différence entre les comparaisons et les métaphores, la différence entre les stubs et les mocks est subtile et historique, et a peut-être plus à voir avec les différentes communautés et philosophies dans le monde des tests que toute différence technique majeure.
Ils représentent des approches légèrement différentes des tests. Une maquette peut être écrite comme un talon. Un stub peut généralement être développé en une maquette.
Lequel devriez-vous utiliser?
Vous constaterez peut-être que vous commencez par créer des stubs, puis plus tard, vous constaterez peut-être que vous devez créer des simulations complètes pour certains de vos objets. Vous voudrez peut-être vous moquer de tout au fur et à mesure, ou vous voudrez peut-être simplement vous moquer si nécessaire.
la source
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'assertion sur le stub et le stub en réécrivant l'implémentation d'une méthode corrigeant le comportement d'un faux objet. avec Mock, vous fixez la sortie de votre test unitaire: ainsi votre test unitaire fait une attente sur votre objet Mocking en vérifiant l'interaction interne dans votre objet fictif.
la source
should have been called with
pour affirmer desstub
paramètres.Dans le cas du framework Moq - la méthode de configuration est STUB où comme méthode de vérification est Mock
la source
Une chose que j'ai également remarquée est que lorsque j'utilise MockRepository.GenerateMock, je dois définir explicitement des attentes sur un appel de méthode spécifique pour intercepter cet appel. Avec les stubs, il semble intercepter automatiquement n'importe quelle méthode tant qu'elle est virtuelle.
la source