unit testing - ¿Qué es un "Stub"?
unit-testing tdd (5)
Creo que "stub" viene de STartUpBlock. se usa para referirse a partes del código que se generan automáticamente para ayudarlo a usted, el desarrollador, a comenzar.
Entonces, siguiendo con la resolución de mi nuevo año de obtener más en TDD, ahora estoy empezando a trabajar más con Rhino Mocks .
Una cosa que estoy ansioso por hacer es asegurarme de que realmente entiendo en qué me estoy metiendo, así que quería verificar mi comprensión de lo que he visto hasta ahora (y pensé que sería bueno subirlo aquí como recurso).
¿Qué es un "Stub"?
Martin Fowler escribió un excelente artículo sobre este tema. De ese artículo:
Meszaros usa el término Test Double como el término genérico para cualquier tipo de objeto simulado utilizado en lugar de un objeto real para propósitos de prueba. El nombre proviene de la noción de un doble de acrobacias en las películas. (Uno de sus objetivos era evitar el uso de cualquier nombre que ya se usara ampliamente). Meszaros luego definió cuatro tipos particulares de doble:
- Los objetos ficticios se pasan pero nunca se usan realmente. Por lo general, solo se utilizan para llenar listas de parámetros.
- Los objetos falsos en realidad tienen implementaciones que funcionan, pero generalmente toman algún atajo que los hace inadecuados para la producción (una base de datos en la memoria es un buen ejemplo).
- Los talones brindan respuestas predefinidas a las llamadas realizadas durante la prueba, por lo general no responden a nada fuera de lo programado para la prueba. Los talones también pueden registrar información sobre llamadas, como un talón de la puerta de enlace de correo electrónico que recuerda los mensajes que ''envió'', o tal vez solo la cantidad de mensajes que ''envió''.
- A eso nos referimos con burlas: objetos preprogramados con expectativas que forman una especificación de las llamadas que se espera que reciban.
Para decirlo con mis propias palabras: los objetos simulados "esperan" que se les invoquen ciertos métodos, y normalmente hacen que falle una prueba unitaria si no se cumplen sus expectativas. Los objetos auxiliares proporcionan respuestas enlazadas (y pueden ser autogenerados por las bibliotecas colaboradoras), pero normalmente no causan directamente que la prueba de la unidad falle. Por lo general, solo se utilizan para que el objeto que está probando obtenga los datos que necesita para hacer su trabajo.
Me enfrenté a la pregunta recientemente y reconocí que esta comparación entre Stub y Driver es muy clara y útil:
Básicamente, los stubs y drivers son rutinas que en realidad no hacen nada excepto declararse a sí mismos y los parámetros que aceptan. El resto del código puede tomar estos parámetros y usarlos como entradas.
+---------+-------------------------------+-------------------------------+ | | Stub | Driver | +---------+-------------------------------+-------------------------------+ | Type | Dummy codes | Dummy codes | +---------+-------------------------------+-------------------------------+ | Used in | Top Down Integration | Bottom Up Integration | +---------+-------------------------------+-------------------------------+ | Purpose | To allow testing of the upper | To allow testing of the lower | | | levels of the code, when the | levels of the code, when the | | | lower levels of the code are | upper levels of the code are | | | not yet developed. | not yet developed. | +---------+-------------------------------+-------------------------------+ | Example | A and B are components. | A and B are components. | | | A ---> B | A ---> B | | | | | | | A has been developed. | A still needs to be developed.| | | B still needs to be developed.| B has been developed. | | | Therefore, stub is used | Therefore, driver is used | | | in place of B to imitate it. | in place of A to imitate it | | | | | | | A ---> Stub | Driver ---> B | +---------+-------------------------------+-------------------------------+
Un "stub" es una implementación de una interfaz que existe para proporcionar datos / una respuesta de algún tipo. Por ejemplo:
- un DataSet
- lista de usuarios
- un archivo Xml
Normalmente, esto sería proporcionado por otro servicio (ya sea un servicio web, otra aplicación o una base de datos), pero para mejorar la capacidad de prueba del código, los resultados son "falsos".
Un beneficio importante de esto es que permite hacer afirmaciones en pruebas unitarias basadas en los datos esperados. Si surgen errores debido a errores de datos, entonces las pruebas pueden agregarse fácilmente, crearse un nuevo stub (replicar el error de datos) y producir el código para corregir el error.
Los Stubs se diferencian de Mocks en que se usan para representar y probar el estado de un objeto, mientras que un Mock prueba su interacción .
Un "stub" o "método stub" está diseñado para ser un código de inicio o un sustituto temporal del código que aún no se ha desarrollado. Es un código incorporado generado por un IDE. Los métodos Stub son en realidad métodos usados para probar métodos de una clase en particular. Se usa ingresando algunos valores para las variables locales en sus métodos de desarrollo reales y verifica si el resultado es correcto. Es importante para encontrar errores en tu código.