viernes, 23 de marzo de 2012

Symfony 2: Aislamiento de pruebas

La base de datos es parte de nuestra aplicación por lo que también debe formar parte de las pruebas. Ya que sino las pruebas estarán incompletas y dejaran un agujero en la calidad de nuestro software.

Las pruebas a una base de datos deben hacerse de manera aislada. ¿Que pasaría si una prueba corrompe la base de datos? Nuestro entorno de desarrollo se vería afectado y las siguientes ejecuciones de otras pruebas podrían fallar. Por lo que habría que solucionar el problema restaurando la base de datos. Seguro que nadie quiere molestarse en perder tiempo volviendo a un estado fiable de la base de datos.
Un par de cosas a tener en mente a la hora de realizar las pruebas, que sean cortas y concisas; y que la base de datos no tenga gran cantidad de datos (salvo que sea necesario) para poder ejecutar las pruebas rápidamente. 

Para lograr iniciar las pruebas siempre en el mismo estado y por ende que los cambios no se reflejen en la base de datos, tenemos que usar Doctrine Fixtures. Los fixtures permiten definir los datos que necesitamos  para una ejecución correcta de las pruebas. Estos deben ir definidos en la ruta AcmeBundle/DataFixtures/ORM, y su definición es bastante sencilla.



Y por ultimo hice un pequeño shell script con las ordenas para borrar el esquema actual, crear uno nuevo y cargar los datos.



Con eso ya tenemos listo nuestro entorno de pruebas.