¿Qué significa "to stub" en programación?


Por ejemplo, ¿qué significa en esta cita?

La integración con una API externa es casi una garantía en cualquier aplicación web moderna. Para probar efectivamente dicha integración, necesita stub it out. Un buen stub debería ser fácil de crear y estar constantemente actualizado con las respuestas reales y actuales de la API. En esta publicación, describiremos una estrategia de prueba usando stubs para una API externa.

 84
Author: janko-m, 2012-03-20

6 answers

Un stub es un reemplazo controlable para una Dependencia existente (o colaborador) en el sistema. Mediante el uso de un stub, puede probar su código sin tratar con la dependencia directamente.

Dependencia Externa-Dependencia Existente:
Es un objeto en su sistema que su código bajo prueba interactúa con y sobre el que no tiene control. (Común ejemplos son sistemas de archivos, subprocesos, memoria, tiempo, etc.)

Por ejemplo, a continuación código:

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");
            }
        }
    }

Desea probar mailService.SendEmail() método, pero para hacer eso necesita simular un Excepción en su método de prueba, por lo que solo necesita crear un Stub falso errorService objeto para simular el resultado que desea, entonces su código de prueba será capaz de probar MailService.Método SendEmail () . Como puede ver, necesita simular un resultado que es de otra dependencia que es ErrorService objeto de clase (Dependencia existente objeto).

 77
Author: Mustafa Ekici,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-18 21:45:14

A stub, en este contexto, significa una implementación simulada.

Es decir, una implementación simple y falsa que se ajusta a la interfaz y se va a utilizar para las pruebas.

 79
Author: Oded,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-19 21:00:50

Términos sencillos, son datos ficticios (o datos falsos, datos de prueba...sucesivamente.) que puede usar para probar o desarrollar su código hasta que usted (o la otra parte) esté listo para presentar/recibir datos reales. Es el "Lorem Ipsum" de un programador.

¿La base de datos de empleados no está lista? Inventa uno sencillo con Jane Doe, John Doe...sucesivamente. API no está listo? Inventa una falsa creando una estática .archivo json que contiene datos falsos.

 40
Author: Noon Time,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-08 16:38:54

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 más confusión, necesitamos definir qué es un trozo.

En el contexto general, un stub es una pieza de programa (típicamente una función o un objeto) que encapsula la complejidad de invocar otro programa (generalmente ubicado en otra máquina, máquina virtual o proceso, pero no siempre, puede también ser un objeto local). 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, organizar/serializar los datos/argumentos a pasar (y lo mismo con el resultado potencial), tal vez incluso tratar con la autenticación/seguridad, y así sucesivamente. Tenga en cuenta que en algunos contextos, los stubs también se llaman proxies (como los proxies dinámicos en Java).

Un simulacro es un muy específico y tipo restrictivo de stub, porque un simulacro es un reemplazo de otra función u objeto para pruebas. En la práctica, a menudo utilizamos simks como programas locales (funciones u objetos) para reemplazar un programa remoto en el entorno de prueba. En cualquier caso, el mock 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) o remoto los objetos (RMI, CORBA). La mayoría de los frameworks/bibliotecas de programación distribuida 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).

Normalmente, en RPC, RMI, CORBA, etc., se distingue los stubs del lado del cliente, que en su mayoría se encargan de marshaling / serializing the arguments and performing the remote invocation, and server-side stubs, which mostly take care of unmarshaling/deserializing the arguments and actually execute the remote function/method. Obviamente, los talones de cliente se encuentran en el lado del cliente, mientras que los talones de corte (a menudo llamados esqueletos) se encuentran en el lado del servidor.

Escribir buenos stubs eficientes y genéricos se vuelve bastante difícil cuando se trata de referencias de objetos. Objeto más distribuido frameworks como RMI y CORBA se ocupan de referencias de objetos distribuidos, pero eso es algo que la mayoría de los programadores evitan en entornos REST, por ejemplo. Normalmente, en entornos REST, los programadores JavaScript hacen funciones stub simples para encapsular las invocaciones AJAX (la serialización de objetos es soportada por JSON.parse y JSON.stringify). El proyecto Swagger Codegen proporciona un amplio soporte para generar automáticamente stubs REST en varios idiomas.

 4
Author: Renaud Pawlak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-13 23:37:16

También tiene un muy buen marco de pruebas para crear tal stub. Uno de mis copa es Mockito también Hay EasyMock y otros... Pero Mockito es genial deberías leerlo-paquete muy elegante y potente

 3
Author: Julias,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-19 21:06:38

Stub es una definición de función que tiene el nombre correcto de la función, el número correcto de parámetros y produce un resultado ficticio del tipo correcto.

Ayuda a escribir la prueba y sirve como una especie de andamiaje para hacer posible ejecutar los ejemplos incluso antes de que se complete el diseño de la función

 1
Author: Xinyang Li,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-27 12:16:57