[Ror-es] A vueltas con las fixtures
Fernando García Samblas
fernando.garcia at the-cocktail.com
Mon Apr 9 12:50:41 GMT 2007
Roberto M. Oliva escribió:
> [...] Queria contestaciones como la tuya, porque ya tengo algo que investigar:
> assert_difference(Model, :count, n)
>
cuidado, assert_difference no es (a día de hoy) un helper de Rails.
Nosotros (Blat, otros compañeros en the-cocktail y yo) estamos usándolo
desde hace mucho tiempo pero en realidad nos lo trajo el "login generator".
> Y aprovecho para hacerte una pregunta... En los testeos que tu haces, como
> los evaluas? Contra valores fijos? Consultas la base de datos para comparar
> lo devuelto por la funcionalidad?
>
> Muchas gracias por tu ayuda
> Un saludo
> Roberto M. Oliva
>
>
> -----Mensaje original-----
> De: Fernando Blat [mailto:ferblape at gmail.com]
> Enviado el: jueves, 05 de abril de 2007 11:27
> Para: roliva at idecnet.com; La lista sobre Ruby On Rails (rubyonrails.com) en
> castellano
> Asunto: Re: [Ror-es] A vueltas con las fixtures
>
> Hola Roberto,
>
> la verdad es que yo soy muy joven, y eso unido a las carencias del plan de
> estudios de Ingeniero Informático en la Politécnica de Valencia, han hecho
> que yo no supiera nada de testing de software hasta que vi que lo hacía Ruby
> on Rails.
>
> Así que digamos, que yo he aprendido de testing tomando como base sólo Ruby
> on Rails.
>
> Como bien dices, las fixtures son una ayuda de Rails para probar datos en el
> entorno de testing, y en cada test tendremos una serie de fixtures que
> hayamos definido. Por lo menos yo, le veo más ventajas de las que tú
> planteas:
>
> - tener datos ya precargados te ahorra tener que insertarlos cada vez que
> quieras realizar una consulta, con lo cuál sólo lo haces una vez para toda
> la suite de test y no te repites (DRY famoso) y evitas errores, etc
>
> - también te permite gestionar los datos de test de forma que puedas ir
> incluyendo nuevos datos según avanza el desarrollo del proyecto, sin tener
> que modificar luego todas tus funciones. Esto es muy útil para añadir casos
> excepcionales, que siempre surgen cuando la funcionalidad ya está
> desarrollada.
>
> - (pon aquí tu ventaja).
>
> Y por último, comentar que no resulta tan problemático lo de tener ya datos
> para testear la inserción de nuevos datos, por ejemplo utilizando el helper
> assert_difference(Model, :count, n) que comprueba que se hayan insertado n
> objetos, siendo n un entero tanto positivo como negativo.
>
> Conclusión, y perdona la piedra de e-mail: que lo de las fixtures no resulta
> problemático, sino que puede llegar a ser una ventaja si te acostumbras a
> ello.
>
> Y si no te acostumbras, siempre puedes ejecturar un borrado de todos los
> objetos del modelo antes de ejecutar el test :)
>
> Un saludo.
>
> On 4/3/07, Roberto M. Oliva <roliva at idecnet.com> wrote:
>
>> 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
>>
>>
>>
>>
>> _______________________________________________
>> Ror-es mailing list
>> Ror-es at lists.simplelogica.net
>> http://lists.simplelogica.net/mailman/listinfo/ror-es
>>
>>
>
>
> --
> Fernando Blat
> blog > http://www.inwebwetrust.net
>
> _______________________________________________
> Ror-es mailing list
> Ror-es at lists.simplelogica.net
> http://lists.simplelogica.net/mailman/listinfo/ror-es
>
>
>
--
Fernando García Samblas
fernando.garcia at the-cocktail.com
The Cocktail
C/ Salamanca 17
28020 Madrid
+34 91 567 06 05
More information about the Ror-es
mailing list