La automatización de pruebas de la lógica empresarial de aplicaciones complejas tiene una larga historia, que comienza desde los primeros scripts para validar validadores hasta las pruebas modernas de microservicios. A medida que las arquitecturas se complican (monolitos, SOA, micro y macroservicios), surge el problema: los cambios en un nivel de la arquitectura a menudo rompen las pruebas en otros niveles.
Problema consiste en la necesidad de escribir pruebas que sean resistentes a la reorganización de las interacciones entre las capas de la aplicación: cambios en los contratos, estructuras de datos, procesos de negocio. A menudo, las pruebas se vinculan a detalles de implementación, lo que las convierte en "frágiles" y difíciles de mantener.
Solución — construir pruebas según el principio de "caja negra" con orientación a datos de entrada/salida, usar capas de abstracción para acceder a las entidades del sistema (por ejemplo, Capa de Servicio y Capa de Dominio en la arquitectura). Es necesario separar la lógica empresarial de los detalles de infraestructura y usar mocks/stubs para dependencias externas, para garantizar la aislamiento y estabilidad de las pruebas.
Características clave:
¿Cuál es la diferencia entre verificar la lógica empresarial a través de la capa UI y a través de API/Capa de Dominio?
Las pruebas de UI a menudo son menos resistentes a los cambios, ya que los más mínimos cambios en la interfaz llevan a fallos en las pruebas. Las pruebas a través de API o Capa de Dominio dependen menos del front-end y aíslan mejor la verificación de las reglas de negocio.
¿Es necesario simular todas las dependencias de la lógica empresarial para su prueba?
¡No! No se debe simular lo que se puede implementar en el entorno de prueba (por ejemplo, memoria ligera en lugar de base de datos). Los mocks son necesarios para dependencias externas complejas, costosas o que son externas. La simulación completa puede llevar a pruebas "falsas" que no reflejan escenarios reales.
¿Es suficiente probar solo escenarios positivos para la lógica empresarial?
¡No! Es importante cubrir todos los casos límite y los escenarios negativos, de lo contrario, los errores críticos permanecerán sin ser detectados, lo que llevará a la vulnerabilidad del proceso de negocio principal.
En el proyecto, solo se probaba la lógica empresarial a través de pruebas UI de Selenium, trabajando directamente con botones y formularios. Cada refactorización del front-end llevaba a la caída masiva de pruebas automáticas.
Ventajas:
Desventajas:
En el proyecto se implementó una capa de pruebas API y unitarias. La UI cubría solo caminos críticos, toda la validación restante se realizaba a través del nivel de servicio con simulación de servicios costosos.
Ventajas:
Desventajas: