En este contexto, la palabra "stub" se usa en lugar de "mock", pero en aras de la claridad y precisión, el autor debería haber usado "mock", porque "mock" es una especie de stub, pero para probar. Para evitar una mayor confusión, debemos definir qué es un código auxiliar.
En el contexto general, un stub es un fragmento de programa (normalmente una función o un objeto) que encapsula la complejidad de invocar otro programa (normalmente ubicado en otra máquina, VM o proceso, pero no siempre, también puede ser un local objeto). Debido a que el programa real a invocar generalmente no se encuentra en el mismo espacio de memoria, invocarlo requiere muchas operaciones como direccionamiento, realizar la invocación remota real, ordenar / serializar los datos / argumentos que se pasarán (y lo mismo con el resultado potencial), tal vez incluso lidiar con autenticación / seguridad, etc. Tenga en cuenta que en algunos contextos, los stubs también se denominan proxies (como proxies dinámicos en Java).
Un simulacro es un tipo de código auxiliar muy específico y restrictivo, porque un simulacro es un reemplazo de otra función u objeto para probar. En la práctica, a menudo usamos simulacros como programas locales (funciones u objetos) para reemplazar un programa remoto en el entorno de prueba. En cualquier caso, el simulacro puede simular el comportamiento real del programa reemplazado en un contexto restringido.
Los tipos más famosos de stubs son obviamente para programación distribuida, cuando se necesita invocar procedimientos remotos ( RPC ) u objetos remotos ( RMI , CORBA ). La mayoría de las bibliotecas / frameworks de programación distribuidos automatizan la generación de stubs para que no tenga que escribirlos manualmente. Los stubs se pueden generar a partir de una definición de interfaz, escrita con IDL, por ejemplo (pero también puede usar cualquier lenguaje para definir interfaces).
Por lo general, en RPC, RMI, CORBA, etc., se distinguen los stubs del lado del cliente , que en su mayoría se encargan de ordenar / serializar los argumentos y realizar la invocación remota, y los stubs del lado del servidor , que en su mayoría se encargan de desmarshaling / deserializar los argumentos y ejecutar la función / método remoto. Obviamente, los stubs de cliente se encuentran en el lado del cliente, mientras que los stubs de servidor (a menudo llamados esqueletos) se encuentran en el lado del servidor.
Escribir apéndices genéricos y eficaces se vuelve bastante complicado cuando se trata de referencias de objetos. La mayoría de los marcos de objetos distribuidos como RMI y CORBA tratan con referencias de objetos distribuidos, pero eso es algo que la mayoría de los programadores evitan en entornos REST, por ejemplo. Por lo general, en entornos REST, los programadores de JavaScript realizan funciones stub simples para encapsular las invocaciones de AJAX (la serialización de objetos es compatible con JSON.parse
y JSON.stringify
). El proyecto Swagger Codegen proporciona un amplio soporte para generar automáticamente stubs REST en varios idiomas.