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 stub sortir. Un bon stub doit être facile à créer et régulièrement mis à jour avec les réponses actuelles et actuelles de l'API. Dans cet article, nous décrivons une stratégie de test utilisant stubs pour une API externe.
Un stub est un remplacement contrôlable pour un dépendance existante (ou collaborateur) dans le système. En utilisant un stub, vous pouvez tester votre code sans traiter directement la dépendance.
Dépendance externe - Dépendance existante:
C’est un objet de votre système avec lequel votre code testé interagit et sur lequel vous n’avez aucun contrôle. (Les exemples courants sont les systèmes de fichiers, les threads, la mémoire, l'heure, etc.).
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("[email protected]", "ErrorOnWebService", "someerror");
}
}
}
Vous voulez tester la méthode 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 objet Fake Stub errorService pour simuler le résultat souhaité, votre code de test pourra alors tester mailService.SendEMail () méthode. Comme vous le voyez, vous devez simuler un résultat provenant d'une autre dépendance qui est ErrorService objet de classe (objet Dépendance existante).
Un stub , dans ce contexte, signifie une implémentation fictive.
C'est-à-dire une implémentation simple, fausse, conforme à l'interface et devant être utilisée pour les tests.
En termes simples, ce sont des 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 un programmeur "Lorem Ipsum".
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 un faux en créant un fichier statique .json contenant de fausses données.
Dans ce contexte, le mot "talon" est utilisé à la place de "simulacre", mais pour des raisons de clarté et de précision, l'auteur aurait dû utiliser "simulacre", parce que "simulacre" est une sorte de talon, mais à des fins de test. Pour éviter toute confusion supplémentaire, nous devons définir ce qu'est un talon.
Dans le contexte général, un stub est un élément de programme (généralement une fonction ou un objet) qui encapsule la complexité de l'appel d'un autre programme (généralement situé sur une autre machine, machine virtuelle ou processus - mais pas toujours, il peut également s'agir d'un programme local. objet). Parce que le programme à invoquer ne se trouve généralement pas sur le même espace mémoire, son appel nécessite de nombreuses opérations telles que l'adressage, l'exécution de l'appel à distance, le marshalling/sérialisation des données/arguments à transmettre (et la même chose avec le résultat potentiel), peut-être même traiter d'authentification/sécurité, et ainsi de suite. Notez que dans certains contextes, les stubs sont également appelés proxies (tels que les proxys dynamiques en Java).
Un simulacre est un type de tronçon très spécifique et restrictif, car un simulacre remplace un autre objet ou fonction à tester. En pratique, nous utilisons souvent des simulacres en tant que programmes locaux (fonctions ou objets) pour remplacer un programme distant dans l'environnement de test. Dans tous les cas, la maquette peut simuler le comportement réel du programme remplacé dans un contexte restreint.
La plupart des types de stubs les plus célèbres sont évidemment destinés à la programmation distribuée, lorsqu'il faut faire appel à des procédures distantes ( RPC ) ou objets distants ( RMI , CORBA ). La plupart des frameworks/bibliothèques de programmation distribués automatisent la génération de 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 avec IDL (mais vous pouvez également utiliser n'importe quel langage pour définir des interfaces).
En règle générale, dans RPC, RMI, CORBA, etc., on distingue les stubs côté client , qui se chargent principalement de marshaler/sérialiser les arguments et d'effectuer l’invocation à distance et des stubs côté serveur , qui s’occupent principalement de démarquage/désérialisation des arguments et exécutent réellement la fonction/méthode distante. Bien entendu, les stubs clients sont situés du côté client, alors que les stubs de serveurs (souvent appelés squelettes) se trouvent du côté du serveur.
Écrire de bons talons génériques et efficaces devient assez difficile lorsqu'il est question de références d'objets. La plupart des frameworks d’objets distribués, tels que RMI et CORBA, traitent des références d’objets distribués, mais c’est quelque chose que la plupart des programmeurs évitent dans les environnements REST. Par exemple, dans les environnements REST , Les programmeurs JavaScript créent de simples fonctions de stub pour encapsuler les invocations AJAX (la sérialisation des objets étant prise en charge par JSON.parse
et JSON.stringify
). Le projet Swagger Codegen fournit un support complet pour générer automatiquement des stubs REST dans différentes langues.
Le stub est une définition de fonction qui a le nom correct de la fonction, le nombre correct de paramètres et produit un résultat factice du type correct.
Il est utile d’écrire le test et de servir d’échafaudage pour pouvoir exécuter les exemples avant même que la conception de la fonction ne soit terminée.
Cette phrase est presque certainement une analogie avec une phase de la construction d’une maison: la "plomberie". Pendant la construction, alors que les murs sont encore ouverts, la plomberie est brute. Cela est nécessaire pour que la construction se poursuive. Ensuite, lorsque tout est suffisamment prêt, on revient et ajoute des robinets, des toilettes et le produit final. (Voir par exemple Comment installer une dérivation de plomberie
Lorsque vous "stubez" une fonction dans la programmation, vous en créez suffisamment pour fonctionner (pour tester ou écrire un autre code). Ensuite, vous revenez plus tard et remplacez-le par la mise en œuvre complète.