Actualmente estamos trabajando en un proyecto PHP / MySQL mediano / grande. Estamos realizando pruebas unitarias con PHPUnit y QUnit y tenemos dos probadores de tiempo completo que prueban manualmente la aplicación. Nuestros datos de prueba (simulados) se crean actualmente con scripts SQL.
Tenemos problemas con el mantenimiento de scripts para datos de prueba. La lógica de negocios es bastante compleja y un cambio "simple" en los datos de prueba a menudo produce varios errores en la aplicación (que no son errores reales, solo el producto de datos no válidos). Esto se ha convertido en una gran carga para todo el equipo porque constantemente estamos creando y cambiando tablas.
Realmente no veo el punto de mantener los datos de prueba en los scripts porque todo se puede agregar manualmente en la aplicación en aproximadamente 5 minutos con la interfaz de usuario. Nuestro primer ministro no está de acuerdo y dice que tener un proyecto que no podemos implementar con datos de prueba es una mala práctica.
¿Deberíamos abandonar el mantenimiento de los scripts con datos de prueba y simplemente dejar que los evaluadores prueben la aplicación sin datos? ¿Cuál es la mejor práctica?
fuente
Sí, tener pruebas unitarias y maquetas de datos es una buena práctica. El gerente del proyecto es correcto. Dado que realizar un cambio "simple" en los datos de la prueba a menudo produce errores, ese es el núcleo del problema.
El código necesita mejoras. No hacerlo (decir, oye, no necesitamos pruebas) no es una solución, es simplemente agregar deuda técnica . Divida el código en unidades más pequeñas y más probables porque ser incapaz de identificar unidades sin rotura es un problema.
Comienza a hacer un refactor. Mantenga las mejoras pequeñas para que sean manejables. Busque antipatrones como clases / métodos de Dios, que no sigan SECO, responsabilidad única, etc.
Finalmente, mire TDD para ver si funciona para el equipo. TDD funciona bien para garantizar que todo su código sea apto para pruebas (porque primero escribe las pruebas) y también para asegurarse de mantenerse delgado al escribir solo el código suficiente para pasar las pruebas (minimizar la ingeniería).
En general, si una serie de complejos procesos de lógica de negocios produce un conjunto de datos, entonces veo esto como un informe. Encapsular el informe. Ejecute el informe y use el objeto resultante como entrada para la próxima prueba.
fuente
Este es un problema muy común y muy difícil también. Las pruebas automatizadas que se ejecutan en una base de datos (incluso una base de datos en memoria, como HSQLDB ) suelen ser lentas, no deterministas y, dado que una falla en la prueba solo indica que hay un problema en algún lugar de su código o en sus datos, son No mucho informativo.
En mi experiencia, la mejor estrategia es centrarse en las pruebas unitarias para la lógica empresarial. Intente cubrir la mayor cantidad posible de su código de dominio principal. Si acierta esta parte, lo cual es un gran desafío, logrará la mejor relación costo-beneficio para las pruebas automatizadas. En cuanto a la capa de persistencia, normalmente invierto mucho menos esfuerzo en pruebas automatizadas y lo dejo a probadores manuales dedicados.
Pero si realmente desea (o necesita) automatizar las pruebas de persistencia, le recomendaría que lea Software creciente orientado a objetos, guiado por pruebas . Este libro tiene un capítulo entero dedicado a las pruebas de persistencia.
fuente