Uso de Mocks en Testing de Software

Clase 7 de 20Curso de React Testing Library

Resumen

¿Qué es el mock en testing y por qué es crucial?

El concepto de testing es vital en el desarrollo de software, pero a menudo puede verse obstaculizado por factores externos, como la dependencia de conexiones a servicios externos o bases de datos. Aquí es donde los mocks se vuelven esenciales. Los mocks, en esencia, actúan como dobles de acción en el cine; simulan el comportamiento de componentes reales sin ser los componentes reales. Esto ayuda a evitar lo que se conoce como flakey test o pruebas inestables, situaciones en las que las pruebas fallan debido a que un servicio externo no está disponible.

¿Cuáles son los tipos de mocks?

Existen varios tipos de mocks, cada uno con un propósito y aplicación específica:

  • Mocks de constantes o variables: Emulan datos con los que los tests interactúan, reemplazando los datos reales de servicios externos.
  • Mocks de funciones: Se utilizan para simular comportamientos específicos dentro de funciones, como validar que una función se ejecute correctamente cuando se hace clic en un botón.
  • Mocks de módulos: Reemplazan un módulo entero en el entorno de testing. Un ejemplo podría ser simular una base de datos para pruebas, reemplazándola por datos ficticios.
  • Mocks de promesas: Simulan comportamientos asíncronos, como el cumplimiento o no de promesas en JavaScript.

¿Cuándo debes usar mocks?

El uso de mocks no siempre es necesario, pero hay situaciones en las que es crítico:

  1. Dependencia de servicios externos: Los mocks aseguran que las pruebas no se vean comprometidas por la disponibilidad de servicios externos.
  2. Comportamientos no deterministas: Como en tests que varían con el tiempo o circunstancias, los mocks aportan consistencia.
  3. Eficiencia: Reducen el tiempo de ejecución cuando se requiere realizar múltiples peticiones API o procesar grandes volúmenes de datos.

¿Cuáles son los beneficios de utilizar mocks?

Los mocks aportan numerosas ventajas:

  • Pruebas más rápidas: Sin la necesidad de esperar por la respuesta de terceros, los tests se completan más rápidamente.
  • Resultados consistentes: Con los datos controlados puedes prever los resultados esperados.
  • Control total del entorno: Al no depender de factores externos, el control está completamente en tus manos.
  • Pruebas de casos edge: Permiten probar casos extremos o poco comunes dentro de tus aplicaciones sin configurar ambientes reales complejos.

¿Cuáles son las advertencias al usar mocks?

Aunque los mocks proporcionan muchos beneficios, también presentan algunas advertencias:

  • Fragilidad en pruebas: Demasiada dependencia de mocks puede llevar a pruebas frágiles que no reflejan cambios en el software real.
  • Falsa confianza por mocks incorrectos: Un error en la configuración del mock puede generar confianza errónea si no se corresponde con la realidad.
  • Pérdida de casos reales: El uso excesivo de mocks puede hacer que se pierda la visibilidad de cómo se comporta la aplicación en un mundo real.

Utilizar mocks es una práctica poderosa pero que debe manejarse con precaución y criterio, asegurando que su aplicación no eclipse la realidad del entorno donde el software realmente opera. Mantén siempre el equilibrio entre simulación y realidad.