Que signifie le stubbing dans la programmation?


Réponses:


30

Une méthode stub est une méthode qui renvoie simplement un résultat simple mais valide (mais pas nécessairement correct).

Ils sont généralement créés lors de la construction de l'infrastructure et vous ne voulez pas passer du temps sur toutes les méthodes nécessaires pour le moment. Au lieu de cela, vous créez des talons pour que tout se compile et que la saisie semi-automatique de votre IDE connaisse les méthodes que vous prévoyez d'utiliser.

Un autre endroit où les stubs sont utilisés est la moquerie lors des tests.Vous fournissez des méthodes de stub au lieu de la dépendance normale via l'injection de dépendance qui retourne des résultats fixes, puis assurez-vous que le code fait la bonne chose avec eux. Cela isole les tests du code que vous essayez de tester et signifie que vous n'avez pas besoin de faire tourner une base de données juste pour exécuter ces tests.


3
Nitpick: les talons sont utilisés lors du tronçonnage, pas lors des moqueries. Lorsque vous vous moquez, vous utilisez des simulacres. martinfowler.com/articles/mocksArentStubs.html
Jörg W Mittag

+1 pour ce qui précède, mais j'aimerais ajouter que, si vous ne vous attendez pas à ce que les méthodes stubbed soient encore utilisées, il peut être utile que les stubs lèvent une exception ou entraînent une erreur. Exemple "NotImplementedException": msdn.microsoft.com/en-us/library/... commons.apache.org/proper/commons-lang/javadocs/api-release/org/...
Dan Armstrong

6

Il vaut peut-être mieux y répondre par un exemple concret. Prenons le cas où vous créez une application de bureau. Vous avez décidé de nommer une fonction createMenubar, createToolbaret createMainpour que le constructeur de votre application soit net et bien rangé.

Votre code principal ressemblera à ceci (cet exemple est en python):

class ExampleApp():
    def __init__(self):
        self.createMenubar()
        self.createToolbar()
        self.createMain()

Tant que tout ne fonctionnera pas, votre fonction principale échouera, alors comment pouvez-vous tester votre application pendant le développement? Par exemple, si vous commencez à travailler sur createMenubar, l'initialisation échouera après avoir créé la barre de menu car vous n'avez pas implémenté la barre d'outils ou la zone principale de l'interface graphique.

C'est là que les stubs entrent en jeu. Vous pouvez créer une fonction nommée createToolbaret createMainqui satisfait aux exigences du constructeur de l'application (à savoir, que ces fonctions existent), sans avoir à les implémenter réellement. Ces fonctions sont des talons:

def createToolbar():
    pass

def createMain():
    pass

Avec ces stubs en place, vous pouvez commencer à implémenter le programme principal et la barre de menus, sans avoir à vous soucier des détails de la barre d'outils ou de la partie principale du programme. Finalement, vous passerez à la barre d'outils et remplacerez le talon par la fonction réelle. Et enfin, vous allez supprimer le talon de createMainet lui donner une véritable implémentation.

Notez que les talons n'ont pas nécessairement à ne rien faire. Ces stub peuvent, par exemple, créer un widget conteneur vide que le constructeur de l'application peut disposer. Le fait est que vous créez des fonctions ou des objets factices qui font juste assez pour laisser votre autre code s'exécuter pendant que vous le développez. Au fil du temps, vous remplacez les talons un par un jusqu'à ce que votre demande soit terminée.


2

Un "stub" est utilisé dans la programmation "top down". C'est à ce moment que vous construisez votre application du général au particulier. Ce faisant, vous utiliserez des "stubs" comme "espaces réservés" pour les applications spécifiques que vous n'avez pas eu le temps de créer. Ils retournent souvent des éléments comme des valeurs fictives ou aléatoires à la partie plus générale du programme. C'est très bien, le talon nourrit suffisamment d'une valeur pour faire fonctionner la partie la plus «senior» du programme. Jusqu'à ce qu'il soit temps que le talon soit remplacé ou équipé de son véritable calcul ou valeur.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.