jueves, 2 de diciembre de 2010

Implementación de Asserts en GXUnit

Una función básica de cualquier herramienta xUnit es tener la posibilidad de escribir assertions. Estas funciones realizan comparaciones de resultados de ejecuciones con resultados esperados de las pruebas, indican si se obtiene lo esparado y en caso de que no se cumpla, muestra información sobre la ejecución.

Planteamos el siguiente ejemplo de utilización:
Se quiere probar un método DIV(in:&a, in:&b, out:&c) que realiza la división entre &a y &b y devuelve el resultado en &c. Realizamos las siguientes pruebas
1) DIV(1, 1) resultado esperado: 1
2) DIV(1, 0) resultado esperado: error

La idea es que la herramienta permita escribir lo siguiente:
&esperado = 1
DIV(1,1,&resultado)
AsserEquals(&resultado,&esperado)
&esperado = error
DIV(1,0,&resultado)
AsserEquals(&resultado,&esperado)

Nuestra idea es implementarlo mediante un procedimiento GX para independizarnos del ambiente en que se esté generando. La primera limitación con la que nos encontramos es que no podemos sobrecargar el método AssertEquals, o sea, llamar a AssertEquals(a,b), siendo a y b de cualquier tipo.
Para implementar estas funciones en GXUnit planteamos las siguientes opciones de diseño.

Opción 1) Generar un AssertEquals para cada tipo. Por Ejemplo: AssertNumericEquals, AssertStringEquals, etc. Además pasar un parametro más de tipo Boolean que indicará si la función genera un error/excepción.
El pseudocódigo quedaría:

&esperado = 1
DIV(1,1,&resultado)
AssertNumericEquals(&resultado,&esperado,&error)


Opción 2) Generar un AssertEquals que se le pase siempre un string y un tipo, y la herramienta convierta el string al tipo correcto. Para esta opción el usuario debería convertir sus variables a string antes de usar la función Assert por lo que no quedaría para nada práctico.


Nos parece que la primera opción es la más práctica e intuitiva de usar, pero estamos abiertos también a otras ideas. Por ejemplo alguna manera de utilizar sobrecarga de funciones utilizando external objects o alguna otra herramieta.

sábado, 30 de octubre de 2010

Puntos importantes sobre la herremienta

Luego de la presentación del martes se generaron discusiones interesantes con los participantes y de las mismas tomamos las siguientes notas:

- Posibilidad de correr las mismas pruebas luego de modificar el objeto. Pruebas de
wregresión
- Manejar el versionado de los objetos y sus pruebas

- Las pruebas unitarias deben ser parte de la KB, al distribuír un objeto se debe tener la
wposibilidad de hacerlo junto con sus pruebas
- Transacciones y Business Components. ¿Pruebas a través de REST?
- Pruebas sobre Data Selectors. Éstos no viven solos, ¿como se prueban?
- Pruebas sobre Dara Providers. Cada vez más populares, forma de probarlos no muy
wdistinta a la de Business Components
- No complicar el desarrollo debido al mantenimiento de las pruebas unitarias.
wwww- Al borrar un objeto se debe poder borrar todos sus casos de prueba
wwwwwautomáticamente
wwww- Tener el cuidado necesario para que no llegue a producción nada que sea
wwwwwestrictamentede las pruebas
wwww- Ver problemas con los calls de las pruebas a los objetos. Manejo del árbol de
wwwwwllamadas
- Definir oráculo según cierta ejecución. Por ejemplo: Ejecutar un procedimiento y decir wque el resultado esperado es devuelto, capturando los procedimientos llamados con wsus parámetros, etc.
- Verificador de salidas de tipo XML
- Prioridad de Objetos a realizarles pruebas unitarias: Procedure, Transactions, Data wProviders.

Por supuesto, la discución sigue abierta y se agradecen ideas sobre estos puntos y nuevos que puedan ir surgiendo.

jueves, 28 de octubre de 2010

Primera Presentación del Proyecto

El martes pasado presentamos el estado del arte del projecto GXUnit en las oficinas del CES (Centro de ensayo de Software). En la misma expusimos la investigación realizada hasta el momento y luego se generó una valiosa discusión acerca de los requerimientos que debería satisfacer la herramienta.

martes, 5 de octubre de 2010

Bienvenidos!!!

Bienvenidos al Blog de GXUnit, la herramienta de automatización de pruebas unitarias para GeneXus. Proximamente publicaremos los avances del desarrollo del proyecto.

Cálidos Saludos!!!