Dans ce contexte, le mot «stub» est utilisé à la place de «mock», mais pour des raisons de clarté et de précision, l'auteur aurait dû utiliser «mock», car «mock» est une sorte de stub, mais pour des 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 (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, VM ou processus - mais pas toujours, il peut également être un objet). Étant donné que le programme réel à appeler 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 réel, le rassemblement / la sérialisation des données / arguments à transmettre (et de même avec le résultat potentiel), peut-être même traitant d'authentification / sécurité, et ainsi de suite. Notez que dans certains contextes, les stubs sont également appelés proxies (comme les proxies dynamiques en Java).
Une maquette est un type de stub très spécifique et restrictif, car une maquette est un remplacement d'une autre fonction ou d'un autre objet à tester. Dans la pratique, nous utilisons souvent des simulations comme 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.
Les types de stubs les plus connus sont évidemment destinés à la programmation distribuée, lorsqu'il est nécessaire d'appeler des procédures distantes ( RPC ) ou des 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 par exemple (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 prennent principalement en charge le marshaling / sérialisation des arguments et l'exécution de l'invocation à distance, et les stubs côté serveur , qui prennent principalement en charge le démarshaling / désérialisation. les arguments et exécutez réellement la fonction / méthode distante. De toute évidence, les stubs clients sont situés du côté client, tandis que les stubs de serveurs (souvent appelés squelettes) sont situés du côté serveur.
Écrire de bons stubs efficaces et génériques devient assez difficile lorsqu'il s'agit 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. En règle générale, dans les environnements REST, les programmeurs JavaScript créent des fonctions stub simples pour encapsuler les appels AJAX (la sérialisation des objets étant prise en charge par JSON.parse
et JSON.stringify
). Le projet Swagger Codegen fournit un support étendu pour la génération automatique de stubs REST dans différentes langues.