¿Que es fake, stub y mock en Unit Testing?.

En este post te voy a explicar la diferencia entre los conceptos fake, stub y mock cuando construyes pruebas unitarias.

¿Qué son fake objects?.

Para realizar pruebas que comprueben el estado de los componentes de tus sistemas, es necesario poder aislar los componentes y los servicios. Todos los objetos en un programa tienen una relación fuerte o débil, estos se ubican en una determinada posición dentro del flujo del programa. Si quieres probar un componente, entonces debes poder reproducir las condiciones en las que este vive, para poder hacer eso, debes de crear objetos falsos que emulen el estado ideal de tu clase u objeto.

Si alguna vez tuviste un pez mascota, por ejemplo, tuviste que aislarlo de su ecosistema natural, llevándolo a otro ecosistema construido artificialmente, una pecera. Bueno, en este caso el entorno donde vive el pez naturalmente es el entorno productivo y la pecera es el ambiente de pruebas, casi todos los accesorios de la pecera que interactúan con tu pez mascota son los objetos falsos o fakes.

Los objetos fake pueden construirse, inyectarse, sobreescribirse o falsearse en tiempo de ejecución.  Un objeto falso guarda menos relación con uno verdadero y produce pruebas más aislables, en teoría.

¿Qué es un stub?.

Dentro del contexto de una prueba, solo vas a validar que un estado sea esperado o no. Para realizar eso vas a necesitar incluir muchos objetos que te sirvan para preparar el estado de tu componente. Todos los objetos que te sirvan para verificar el estado, si es válido o no, se consideran stubs.

También los objetos reales que usas en tus pruebas y no sirven para demostrar un estado pueden considerarse stubs.

¿Qué es un mock?.

Las pruebas deben de validar la existencia o no existencia de un estado determinado, solo uno. El objeto que verifica si la prueba pasa o falla se conoce como mock. Por ejemplo:

Supón que eres el encargado de probar un nuevo cinturón de seguridad en la fábrica de automóviles. No hace falta tener un vehículo completamente nuevo, podemos quitar piezas o accesorios para abaratar costes, tampoco es necesario un motor, con un objeto que pese lo mismo es suficiente. Ahora, vamos a probar que el cinturón no sé aflojé cuando el vehículo es impactado. Para esto necesitaremos un maniquí al que le colocaras el cinturón, el muñeco va a ser nuestro mock. Si el cinturón se rompe o se afloja y permite que el maniquí salga disparado entonces nuestra prueba fallo. Todos los demás objetos fuera del cinturón y el maniquí, sean objetos reales o falsos que te permiten la ejecución de la prueba  son stubs.

Estos términos son una convención.

Los términos que te describí anteriormente son una convención, es posible que encuentres otros significados u otros nombres. Lo que debes de tener en cuenta es que hay dos tipos de objetos falsos: los que necesitas para reproducir un estado y los que confirman la validez o no validez de una prueba unitaria.

Autor imagen: Steinar Engeland

Gustavo Sánchez