[Ror-es] A vueltas con las fixtures
Roberto M. Oliva
roliva at idecnet.com
Tue Apr 3 10:14:16 GMT 2007
Hola a todos!
Estamos desarrollando un proyecto en rails de un tamaño que empieza a
ser considerable. Para los testeos (tanto unitarios como funcionales)
estamos utilizando las fixtures y me estan surgiendo una serie de dudas
filosoficas, a ver que opiniones teneis al respecto.
En otros proyectos que he desarrollado (en .NET) he realizado los
testeos siguiendo estos pasos por cada testeo (nada nuevo):
1- Base de datos vacia
2- Carga de datos requeridos por el testo.
3- Ejecucion de la funcionalidad a testear
4- Comprobacion del resultado de la funcionalidad.
La idea es que yo preparo los datos para asegurarme el resultado del
testeo. Con lo que consigo, entre otras cosas: Testeos aislados
(requisito fundamental del TDD) y logica del testeo minima (si hacemos
una logica grande nos puede fallar y eso es lo peor que nos puede
pasar... a no ser que testeemos el testeo ;) ).
Por ejemplo, voy a testear una funcion que me devuelva los clientes que
haya en una tabla:
1- Base de datos vacia
2- Meto dos clientes en la tabla
3- Ejecuto la funcion.
4- Compruebo que me devuelve 2 clientes y que tienen los datos
esperados.
Como se ve la comprobacion es minima en cuanto a funcionalidad.
Con esta aproximacion he realizado proyectos basados en TDD con
resultados muy satisfactorios.
Por otro lado, estan lo que utiliza Rails que son los fixtures. Por lo
que he leido entiendo a las fixtures como una mini base de datos de la
aplicacion sobre la que hacer testeos. Esto tiene la ventaja de que
facilita mucho la entrada de datos en la base de datos. Pero complica
muchisimo la comprobacion de los datos ya que los testeos no son
aislados. Esto hace que la comprobacion no presupone nada sobre el
estado inicial de los datos, hay que realizar funcionalidad de testeos
para saber que el resultado requerido es correcto. Siguiendo los
ejemplos anteriores se seguiria un proceso como el siguiente utilizando
fixtures:
1- Base de datos vacias
2- Meto fixtures (por ejemplo 2 clientes)
3- Ejecuto la funcion a testear
4a- Consulto el numero de clientes que hay en la base de datos
4b- Compruebo que el punto 3 y el punto 4a me devuelve lo mismo.
Porque hay que hacerlo asi? Porque nadie me impide, por que lo necesite
para otro testeo, el incluir uno o mas clientes en la lista.
Resumiendo (perdonad por el tocho que os he escrito, pero creo que es
una teoria interesante para todos) las fixtures no apoyan el aislamiento
de los testeos, mas bien lo perjudican... eso, o es que las estamos
orientando mal.
Nos ayudais? Que opinion teneis al respecto?
Muchas gracias!!!
Roberto M. Oliva
More information about the Ror-es
mailing list