¿Mock, Stub o Spy? ¿Cuál es la diferencia y cuándo debo usar cada uno?

La mayoría de los desarrolladores probablemente han oído hablar de mocksstubs 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

El verdadero Schwarzenegger se disfraza de Terminator en el museo de cera y  pasa esto

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

Arnold Schwarzenegger alongside a dummy head of himself behind the scenes  on #Terminator… | Arnold schwarzenegger movies, Arnold bodybuilding, Arnold  schwarzenegger

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

Hollywood Stuntman Billy Lucas Parties at the D Casino Hotel Las Vegas

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

Author: Alex Andrade

Magister Ingeniería de Software, MBA y Especialista en Gerencia de Proyectos Tel: +57-317-241-5118

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.