Qu'est-ce qu'un «stub»?

116

Donc, dans le prolongement de ma résolution du nouvel an pour obtenir plus de TDD, je commence maintenant à travailler davantage avec Rhino Mocks .

Une chose que je tiens à faire est de m'assurer de vraiment comprendre ce dans quoi je m'engage, alors je voulais vérifier ma compréhension de ce que j'ai vu jusqu'à présent (et j'ai pensé que ce serait bien de le faire ici en tant que Ressource).

Qu'est-ce qu'un «stub»?

Rob Cooper
la source
6
vous posez d'abord une question, puis vous donnez la réponse?
empi
17
Comme indiqué dans la question - je cherche à vérifier si ma compréhension est correcte, je voulais que la réponse soit ici (que ce soit la mienne ou non) pour fournir une ressource sur cette question très posée mais rarement bien répondue: )
Rob Cooper
42
Répondre à sa propre question est également indiqué dans la FAQ comme un moyen valable d'utiliser le site - cela devrait être encouragé, en fait.
Erik Forbes
C'est bien de répondre à vos propres questions, même si la question elle-même a un peu trop de bruit (autobiographie), et ne montre aucun effort pour trouver une réponse, aucune inclination de ce que la personne a fait pour essayer de trouver la réponse.
eric

Réponses:

112

Martin Fowler a écrit un excellent article sur ce sujet. De cet article:

Meszaros utilise le terme Test Double comme terme générique pour tout type d'objet simulé utilisé à la place d'un objet réel à des fins de test. Le nom vient de la notion de Stunt Double dans les films. (L'un de ses objectifs était d'éviter d'utiliser un nom qui était déjà largement utilisé.) Meszaros a alors défini quatre types particuliers de double:

  • Des objets factices sont transmis mais jamais réellement utilisés. Habituellement, ils sont simplement utilisés pour remplir les listes de paramètres.
  • Les faux objets ont en fait des implémentations fonctionnelles, mais prennent généralement un raccourci qui les rend non adaptés à la production (une base de données en mémoire est un bon exemple).
  • Les stubs fournissent des réponses standardisées aux appels effectués pendant le test, ne répondant généralement pas du tout à quoi que ce soit en dehors de ce qui est programmé pour le test. Les stubs peuvent également enregistrer des informations sur les appels, comme un stub de passerelle de messagerie qui se souvient des messages qu'il a «envoyés», ou peut-être seulement du nombre de messages qu'il «a envoyés».
  • On parle ici de simulacres: des objets préprogrammés avec des attentes qui forment une spécification des appels qu'ils sont censés recevoir.

Pour le dire dans mes propres mots: les objets simulés «s'attendent» à ce que certaines méthodes soient appelées sur eux, et font généralement échouer un test unitaire si leurs attentes ne sont pas satisfaites. Les objets stub fournissent des réponses prédéfinies (et peuvent être générées automatiquement par des bibliothèques d'assistance), mais ne provoquent généralement pas directement l'échec du test unitaire. Ils sont généralement simplement utilisés pour que l'objet que vous testez obtienne les données dont il a besoin pour faire son travail.

Ross
la source
2
Alors, quelle est la différence entre les faux objets et les sutbs? Comme vous l'avez dit, ils ont le même rôle à mettre en œuvre, n'est-ce pas?
LKM
4
@LKM un faux objet est un objet réel qui implémente de réelles fonctionnalités et fait des choses. Les talons ne sont que des «réponses standardisées», par exemple. résultats JSON codés en dur qui imitent ce qui serait renvoyé par le serveur Web.
user3344977
31

Un «stub» est une implémentation d'une interface qui existe pour fournir des données / une réponse quelconque. Par exemple:

  • un DataSet
  • liste des utilisateurs
  • un fichier Xml

Normalement, cela serait fourni par un autre service (que ce soit un service Web, une autre application, une base de données) mais afin d'améliorer la testabilité du code, les résultats sont "falsifiés".

Un avantage majeur de ceci est qu'il permet de faire des affirmations dans des tests unitaires basés sur les données attendues. Si des erreurs surviennent en raison d'erreurs de données, des tests peuvent être facilement ajoutés, un nouveau stub créé (répliquant l'erreur de données) et un code produit pour corriger l'erreur.

Les stubs diffèrent des Mocks en ce qu'ils sont utilisés pour représenter et tester l' état d'un objet, alors qu'un Mock teste son interaction .

Rob Cooper
la source
merci pour votre réponse, mais je ne comprends toujours pas: "une implémentation d'une interface" ??
BKSpurgeon
6

Je crois que "stub" vient de STartUpBlock. il est utilisé pour faire référence à des parties de code qui sont générées automatiquement pour vous aider, le développeur, à démarrer.

Kris
la source
1
Je ne pense pas que ce soit correct. Cela vient probablement de cette pratique dans la construction de maisons: hunker.com/12000314/what-is-a-stub-out
mattdm
3

Une «méthode de stub» ou «stub» est conçue pour être un code de démarrage ou un substitut temporaire à un code encore à développer. C'est un code intégré généré par un IDE. Les méthodes stub sont en fait des méthodes utilisées pour tester les méthodes d'une classe particulière. Il est utilisé en entrant des valeurs pour les variables locales dans vos méthodes de développement réelles et en vérifiant si la sortie est correcte. Il est important de trouver des bogues dans votre code.

Nasserr
la source
Cette réponse serait meilleure si elle était expliquée plus en détail: quel est le but d'une méthode stub? Comment est-ce utilisé? pourquoi c'est important?
Evan Weissburg
Merci! Je suis juste nouveau dans la programmation et je viens de commencer à apprendre le développement logiciel. Jusqu'à présent, c'est ce que je comprends des méthodes de stub. Je ne sais donc pas vraiment quel est son objectif, son importance et comment il est utilisé. Mais je pense que les méthodes stub sont en fait des méthodes utilisées pour tester les méthodes d'une classe particulière. Il est utilisé en entrant des valeurs pour les variables locales dans vos méthodes de développement réelles et en vérifiant si la sortie est correcte. Il est important de trouver des bogues dans vos codes. Si vous avez autre chose à ajouter ou à corriger, veuillez faire un commentaire. Je suis juste en train d'apprendre les tests.
Nasserr
1
C'est formidable que vous appreniez! Vous devez modifier votre réponse originale afin que les futurs lecteurs puissent facilement en tirer des leçons au lieu de la publier dans les commentaires. De plus - si vous n'êtes pas sûr de quelque chose, pourquoi publiez-vous une réponse faisant autorité à ce sujet?
Evan Weissburg
1
C'est bien si vous êtes un auto-apprenant - sur StackOverflow, vous n'avez pas besoin de publier des réponses à moins que vous n'en soyez sûr. Ce n'est pas un forum standard. Voir: stackoverflow.com/tour
Evan Weissburg
1
Merci beaucoup pour les guides et suggestions. J'apprécie beaucoup!
Nasserr
3

J'ai récemment fait face à la question et j'ai reconnu que cette comparaison entre Stub et Driver est vraiment claire et utile:

Fondamentalement, les stubs et les pilotes sont des routines qui ne font rien d'autre que se déclarer et les paramètres qu'ils acceptent. Le reste du code peut alors prendre ces paramètres et les utiliser comme entrées.

+ --------- + ------------------------------- + ------- ------------------------ +
| | Stub | Chauffeur |
+ --------- + ------------------------------- + ------- ------------------------ +
| Type | Codes factices | Codes factices |
+ --------- + ------------------------------- + ------- ------------------------ +
| Utilisé dans | Intégration descendante | Intégration ascendante |
+ --------- + ------------------------------- + ------- ------------------------ +
| Objectif | Pour permettre le test de la tige | Pour permettre le test du bas |
| | niveaux du code, lorsque le | niveaux du code, lorsque le |
| | les niveaux inférieurs du code sont | les niveaux supérieurs du code sont |
| | pas encore développé. | pas encore développé. |
+ --------- + ------------------------------- + ------- ------------------------ +
| Exemple | A et B sont des composants. | A et B sont des composants. |
| | A ---> B | A ---> B |
| | | |
| | Un a été développé. | A doit encore être développé.
| | B doit encore être développé. | B a été développé. |
| | Par conséquent, stub est utilisé | Par conséquent, le pilote est utilisé |
| | à la place de B pour l'imiter. | à la place de A pour l'imiter |
| | | |
| | A ---> Stub | Pilote ---> B |
+ --------- + ------------------------------- + ------- ------------------------ +

De la différence entre le stub et le pilote

Vahid Hallaji
la source
0

Après quelques recherches et sur la base des fichiers stub que j'ai rencontrés au cours de ma vie de codeur, je dirais qu'un fichier stub est juste un fichier qui contient tout ou partie de l'implémentation d'un fichier. Cela aide les développeurs à commencer à coder.

Deric Lima
la source