
La mayoría de los desarrolladores probablemente han oído hablar de mocks, stubs y spies en el mundo de los dobles de prueba. Estos dobles son utilizados para hacer que las pruebas sean más fáciles de escribir, más rápidas o se posea un mayor control al simular elementos que no son el propósito principal de la prueba específica o que son costosos, en tiempo o dinero, de duplicar como un servicio externo o una base de datos. A menudo existe confusión sobre la diferencia entre los tres y cuándo usarlos. En este artículo aclararemos las cosas y las referencias al mundo del cine pueden ayudar a entenderlo mejor.
Stubs

Los stubs son la forma más simple de los tres dobles de prueba. Se parecen al código real que están reemplazando, pero siempre devuelven la misma respuesta estática, independientemente de la entrada. Generalmente, es la mejor opción de doble cuando no le importa cuál es el comportamiento de la entidad duplicada. Solo desea que se ejecute sin causar una excepción.
Como los dobles del Museo de Cera de Madame Tussauds, los stubs sirven a un único y sencillo propósito.
Spies

Un spy es casi lo opuesto a los stubs. Permiten que la entidad duplicada conserve su comportamiento original al tiempo que proporciona información sobre cómo interactuó con el código bajo prueba (SUT: Subject Under Test).El spy puede decirle a la prueba qué parámetros se le dieron, cuántas veces se llamó y cuál fue el valor de retorno, si lo hubo.
Los spies también se pueden usar para simular o hacer doblaje de una pequeña parte de la entidad duplicada mientras se deja el resto del comportamiento de esa entidad en su lugar. Por ejemplo, si tiene una clase con múltiples funciones, un spy le permitiría simular una de esas funciones y dejar al resto de la clase comportándose normalmente.
En el cine se utiliza la animatrónica para simular los movimientos de un actor en determinadas escenas, que podrían ser complejas o peligrosas.
Mocks

Los mocks son los dobles de prueba más poderosos. Permiten un control completo sobre la entidad duplicada y proporcionan la misma información que proporciona un spy sobre cómo se ha interactuado con la entidad. Los mocks se configuran antes de que se ejecute el código bajo prueba para que se comporte como nos gustaría.
Hay todo tipo de situaciones para las que puedes configurar tus mocks. Algunas de estas situaciones incluyen:
- Devolver un valor esperado si se dan los parámetros correctos.
- Devolver un valor en la primera llamada y un valor diferente en la segunda llamada.
- Lanza una excepción.
El mundo del celuloide utiliza muchos “dobles de acción” para poder filmar escenas que requieren un mayor rango de trabajo u expresividad que los dobles anteriores no le permitirían, tales como escenas complejas o arriesgadas.
Conclusión
Comprender las herramientas disponibles le permitirá escribir pruebas mejores y más legibles. Sin embargo, no todos los frameworks de dobles de prueba funcionan de la misma manera y pueden tener diferentes definiciones o comportamientos para los mismos dobles de pruebas. Es importante comprender cómo funciona el framework de pruebas que está utilizando su proyecto.
Fuentes
- Mock, Stub, or Spy? What’s the Difference, and When Should I Use Each? por Rob Bell en Atomic Object.
- Imágenes de Arnold Schwarzenegger en el Museo de Cera de Madame Tussauds.
- Imágenes de la filmación de la película Terminator.
- La imagen principal se acredita a Reuters.