172 votes

Que signifie "to stub" en programmation ?

Par exemple, qu'est-ce que cela signifie dans cette citation ?

L'intégration avec une API externe est presque une garantie dans toute application web moderne. Pour tester efficacement une telle intégration, vous devez talon le sortir. Un bon talon doit être facile à créer et constamment à jour avec les réponses réelles et actuelles de l'API. Dans cet article, nous décrirons une stratégie de test utilisant des tests d'API. souches pour une API externe.

11 votes

Avez-vous jeté un coup d'œil à la réponse acceptée en Qu'est-ce qu'un "Stub" ? ?

147voto

Mustafa Ekici Points 2879

Un stub est un remplacement contrôlable d'un produit. Dépendance existante (ou collaborateur) dans le système. En utilisant un stub, vous pouvez tester votre code sans avoir à sans avoir à traiter directement la dépendance.

Dépendance externe - Dépendance existante :
C'est un objet de votre système que votre code testé interagit avec et sur lequel vous n'avez aucun contrôle. (Les exemples courants exemples courants sont les systèmes de fichiers, les threads, la mémoire, le temps, et ainsi de suite).

Exemple dans le code ci-dessous :

public void Analyze(string filename)
    {
        if(filename.Length>8)
        {
            try
            {
                errorService.LogError("long file entered named:" + filename);
            }
            catch (Exception e)
            {
                mailService.SendEMail("admin@hotmail.com", "ErrorOnWebService", "someerror");
            }
        }
    }

Vous voulez tester mailService.SendEMail() mais pour ce faire, vous devez simuler une Exception dans votre méthode de test, il vous suffit donc de créer un Fake Stub errorService pour simuler le résultat que vous voulez, alors votre code de test sera capable de tester mailService.SendEMail() méthode. Comme vous le voyez, vous devez simuler un résultat qui provient d'une autre dépendance, qui est la suivante Service d'erreur objet de classe (objet de dépendance existant).

127voto

Oded Points 271275

A talon dans ce contexte, signifie une mise en œuvre fantaisie.

Il s'agit d'une implémentation simple et factice qui se conforme à l'interface et qui doit être utilisée pour les tests.

3 votes

Plus de détails sont fournis dans le célèbre Les mocks ne sont pas des stubs article de Martin Fowler : "Mais le plus souvent, je vois les objets fantaisie mal décrits. En particulier, je les vois souvent confondus avec les stubs - une aide commune aux environnements de test".

80voto

Noon Time Points 511

En termes simples, il s'agit de données factices (ou fausses données, données de test, etc.) que vous pouvez utiliser pour tester ou développer votre code jusqu'à ce que vous (ou l'autre partie) soyez prêt à présenter/recevoir des données réelles. C'est le "Lorem Ipsum" du programmeur.

La base de données des employés n'est pas prête ? Créez-en une simple avec Jane Doe, John Doe... etc. L'API n'est pas prête ? Créez-en une fausse en créant un fichier .json statique contenant de fausses données.

1 votes

Merci pour l'exemple :)

16voto

Renaud Pawlak Points 381

Dans ce contexte, le mot "stub" est utilisé à la place de "mock", mais par souci de clarté et de précision, l'auteur aurait dû utiliser "mock", car "mock" est une sorte de stub, mais pour les tests. Pour éviter toute confusion supplémentaire, nous devons définir ce qu'est un stub.

Dans le contexte général, un stub est un morceau de programme (typiquement une fonction ou un objet) qui encapsule la complexité de l'invocation d'un autre programme (généralement situé sur une autre machine, VM, ou processus - mais pas toujours, il peut aussi s'agir d'un objet local). Étant donné que le programme à invoquer n'est généralement pas situé dans le même espace mémoire, son invocation nécessite de nombreuses opérations telles que l'adressage, l'exécution de l'invocation à distance, la mise en forme et la sérialisation des données et des arguments à transmettre (ainsi que du résultat potentiel), voire la gestion de l'authentification et de la sécurité, etc. Notez que dans certains contextes, les stubs sont également appelés proxies (comme les proxies dynamiques en Java).

Un mock est un type de stub très spécifique et restrictif, car un mock est un remplacement d'une autre fonction ou d'un autre objet pour les tests. En pratique, nous utilisons souvent les mocks comme des programmes locaux (fonctions ou objets) pour remplacer un programme distant dans l'environnement de test. Dans tous les cas, le mock peut simuler le comportement réel du programme remplacé dans un contexte restreint.

Les types de stubs les plus connus sont évidemment destinés à la programmation distribuée, lorsqu'il faut invoquer des procédures distantes ( RPC ) ou des objets distants ( RMI , CORBA ). La plupart des cadres/librairies de programmation distribuée automatisent la génération des stubs afin que vous n'ayez pas à les écrire manuellement. Les stubs peuvent être générés à partir d'une définition d'interface, écrite à l'aide de la commande IDL par exemple (mais vous pouvez également utiliser n'importe quel langage pour définir des interfaces).

Typiquement, dans RPC, RMI, CORBA, etc., on distingue stubs côté client qui s'occupe principalement de la mise en forme et de la sérialisation des arguments et de l'exécution de l'invocation à distance, et stubs côté serveur qui se chargent principalement de démarshaler/désérialiser les arguments et d'exécuter réellement la fonction/méthode distante. Évidemment, les stubs client sont situés du côté client, tandis que les stubs serveur (souvent appelés squelettes) sont situés du côté serveur.

L'écriture de bons stubs efficaces et génériques devient assez difficile lorsqu'il s'agit de références d'objets. La plupart des cadres d'objets distribués tels que RMI et CORBA traitent les références d'objets distribués, mais c'est quelque chose que la plupart des programmeurs évitent dans les environnements REST par exemple. Typiquement, dans les environnements REST, les programmeurs JavaScript créent de simples fonctions stub pour encapsuler les invocations AJAX (la sérialisation d'objets étant supportée par JSON.parse et JSON.stringify ). Le site Swagger Codegen fournit un support étendu pour la génération automatique de stubs REST dans différentes langues.

10voto

Xinyang Li Points 4108

Le stub est une définition de fonction qui a un nom de fonction correct, le nombre correct de paramètres et produit un résultat fictif du type correct.

Il aide à écrire le test et sert d'échafaudage pour permettre l'exécution des exemples avant même que la conception de la fonction soit terminée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X