martes, 13 de mayo de 2014

Código Visual Fox con calidad asegurada, parte 2: Configurando FoxUnit en nuestro entorno de trabajo

por Julian Haeberli

Continuando con el artículo en el cual introdujimos FoxUnit, en esta segunda parte nos enfocaremos en un nivel más técnico, concretamente en cómo configurar y hacer funcionar FoxUnit en nuestro entorno de trabajo.




En ese sentido, debemos aclarar que FoxUnit se ejecuta dentro de nuestro entorno de desarrollo actual: Puede ser colocado en su propia carpeta (y añadirlo al path) o descomprimirlo dentro de la carpeta misma del proyecto. 

Dentro de la carpeta del proyecto actual, debemos crear una carpeta llamada “Tests” que servirá de almacenamiento para nuestros futuros tests. 

Debemos ejecutar FXU.PRG, y aparecerá la lista de las pruebas actuales. Si esta es la primera vez que ejecutamos FoxUnit, se nos pedirá que especifiquemos o creemos una nueva carpeta para nuestras pruebas.


Se puede filtrar la lista de test ingresando los datos buscados en los campos “Class” (Por clase) y “Name” (por nombre de Test).

Creación de un Test


Hacemos clic en el botón ‘New Class’ para crear una nueva clase de prueba. Podemos basar la clase de prueba en las plantillas incluidas con FoxUnit o en una plantilla personalizada. 
Después de utilizar una plantilla personalizada, FoxUnit la agrega a la lista de plantillas disponibles. 

La clase de prueba estándar incluye comentarios y ejemplos de cómo podemos usar los métodos default (el mínimo sólo incluye las definiciones de métodos). 

Hay dos métodos incorporados a la plantilla: Setup y TearDown. En Setup pondremos el código necesario para instanciar elementos comunes a varios test, para inicializar variables, establecer conexiones a la base de datos, todo lo que pueda ser reutilizado por varios test. En TearDown, cerraremos las conexiones abiertas, limpiaremos la memoria, etc. FoxUnit llama a estos dos métodos cada vez que se ejecuta un test.

Por ejemplo, voy a probar una clase personalizada denominada Cliente. Esta clase es responsable de la creación y la gestión de clientes. Dado que toda la clase de prueba utiliza este objeto para sus propósitos de prueba, he agregado una propiedad llamada oObject antecediendo cualquier método que apunta a este objeto:

DEFINE CLASS Cliente as FxuTestCase OF FxuTestCase.prg
oObjeto = . NULL.

Ahora puse la propiedad oObjeto a la clase Cliente en el método ‘Setup’:

Function Setup
oObjeto = CREATEOBJECT ( "Cliente")

Ahora, cada vez que el test se ejecuta, se dispara este método, creando el objeto.

Verificando el resultado

Hay otros tres métodos ocultos en la clase de prueba: assertEquals, assertTrue y AssertNotNull. Utilizaremos estos métodos para validar los resultados.

Vamos a empezar con AssertNotNull:

Hacemos clic en el botón Agregar Test. FoxUnit añade un método llamado NewTestMethod a la clase de prueba.

Cambiamos el nombre para describir lo que está probando, como ElObjetoFueCreado.

Agregamos código al método para verificar su funcionalidad. Utilizaremos AssertNotNull para obtener una notificación cuando se produce un error:

Function ElObjetoFueCreado 
THIS.AssertNotNull ("El objeto no ha sido creado.", THIS.oObjeto)

Cerramos la clase donde ubicamos nuestro código. Nuestro test se muestra ahora como una de las pruebas disponibles. 
Seleccionamos el test en FoxUnit y hacemos clic en el botón seleccionado para ejecutar la prueba. 
Si la prueba no se ejecuta correctamente, aparecerá en rojo:


En la pestaña “Failures and Errors” (Fallas y errores) tenemos un detalle completo donde el código no se ha ejecutado correctamente.

En este caso falló porque yo no le dije dónde encontrar el objeto cClaseCliente, que tiene la definición de la clase Cliente. Esta es la solución:

Function Setup
SET CLASSLIB TO cClaseCliente
oObject = CREATEOBJECT ("Cliente")

Cuando un test se ejecuta correctamente, aparecerá en verde. 

Ejecución masiva de test

FoxUnit nos permite seleccionar todos los test que queramos ejecutar, podemos hacer una batería de pruebas y ejecutarlos masivamente mientras nos dedicamos a otras tareas. 
Al final, aparecerá cada test con su correspondiente resultado y/o detalle de errores.

Es bueno recalcar que si cerramos Visual Fox y entramos más tarde, se mantendrá todo nuestro último trabajo en FoxUnit.

Links Útiles:

  • Sitio oficial:
  • Review:

En Baufest nos preocupamos por la calidad del código entregado a nuestros clientes. Por eso siempre estamos buscando las mejores soluciones.