anonymousLog in-Register  
Groups

GXUnit

Same page but  with a 'rename safe' link (used for external links)
GXUnit
Es un intento de crear una herramienta con funcionalidad similar a Nunit o Junit, adaptada a la realidad de Genexus.

Por ahora podria utilizarse para crear TEST de objetos Procedure.
El la version YI, podriamos testear Transacciones.
WEBPanels sin campos de entrada, podrian testearse con el webwrapper.
Workpanels, serian complicados de testear, pues mezclan mucho la interfaz con la logica.


La primera etapa seria, hacer un framework de pruebas, para procedimientos

La segunda, seria ayudar a generar los programas de test, con Patterns (Simple Test Pattern)

La tercera, para la que hay que esperar a la Version YI, de Genexus, seria probar las transacciones.


Para lograr mejores resultados y no tener que programar en codigo nativo con genexus, seria bueno contar con comandos del tipo

TRY/CATCH

ASSERT

dentro de los disponibles con Genexus.

Ademas, seria indispensable poder marcar objetos como de TEST, para poder luego detectarlos/ejecutarlos con una herramienta externa y evitarlos en el deployment de produccion de la aplicacion.

Algo mas de info, aqui

Comentarios
GXUnit es una herramienta super necesaria para adaptar Extreme Programming a GeneXus , muy buena la idea. URULINUX :-)


Proyecto GxUnit
 
Resumen de ideas planteadas en la reunión del lunes 31/07/06
 
Presentes: Enrique Almeida, Alejandro Araújo, Uruguay Larre Borges

1) Alcance
En esta primera etapa, el proyecto consistirá en la especificación y creación de una herramienta para la generación automática de programas de test, a ser generados desde y aplicados a los procedimientos, y un framework para su posterior ejecución.
 
2) Esquema de la solución 

 Image:ImagenReunionGxUnit20060731
3) Algunos desafíos a resolver
- Rollback de la Base de Datos a su estado previo a la aplicación de los tests
- Definición y uso de un pattern Simple Test
- Herramienta de desarrollo (.Net, APIs, GxPublic,?)
 
4) Responsabilidades
- Alejandro Araújo: especificación y desarrollo del motor de GxUnit
- Uruguay Larre Borges: especificación y desarrollo del framework para ejecución de tests unitarios
- Enrique Almeida: validación y pruebas

Bajando a tierra algunos conceptos, a modo de especificación funcional...

Posibles nuevos tipos de objetos GeneXus
  1. Se define un nuevo tipo de objeto "TestCase", que se comporta como un procedure, y que servirá para ejecutar los casos de prueba. Para el alcance del diseño que se elaboró, alcanzaría con agregarle una propiedad de "Testeable" a los Procedures). En este documento nos referiremos a los objetos "TestCase" en lugar de procedures con propiedad "Testeable". Deberá existir un mecanismo que permita excluir a los objetos de un tipo dado (por ej. "TestCase") ó con la propiedad "Testeable" seteada al momento de especificar, generar, compilar, exportar, consolidar y hacer el deployment.
  2. Existirá una propiedad del modelo donde se definirá la política para almacenar los "TestCase". Una posibilidad sería la de guardarlos en el mismo folder que el objeto a testear. Otra posibilidad sería la de guardarlos en un folder "X" desde el cual se replicaría la estructura de folders del modelo. Otra posibilidad sería aprovechar la existencia de Categorías en la versión Rocha, y crear una Categoría donde agrupar los objetos del tipo "TestCase", tratandolos de manera diferente que el resto de los objetos de la kb (ver punto anterior).
  3. Se agrega una propiedad "TestGenerate" a los Procedures. Existe una inicialización por default en el modelo de la propiedad "TestGenerate" que aplica a todos los procs.
3.1.        Si la propiedad está en True, al salvar el objeto, GeneXus inspeccionará el árbol de llamadas de dicho objeto, verificando si existen objetos llamadores del tipo "TestCase".
3.1.1.Si no existe ninguno, GeneXus crea un objeto de tipo "TestCase" llamador del objeto a testear, con características de la forma que se enumeran más adelante (eventualmente se creará el folder correspondiente).
3.1.2.Si existen, y hubieron cambios en la regla parm() se crean nuevamente (en realidad, se abren, se modifican automáticamente y se guardan) los objetos de tipo "TesCase". Si no hubieron cambios en la regla parm( ), la generación de los objetos de tipo "TesCase" se propone al usuario como opcional. De haber cambios en la navegación del objeto llamado sin cambios en la regla parm( ), es probable que también se deban re-crear los objetos del tipo "TestCase".
  1. Contenido del proc del tipo "TestCase":
referencias:
en rojo: lo que generaría automáticamente GxUnit
en azul: lo que ingresaría el desarrollador
      parm(out:&TestResult);
      
      // Begin Setup // @Before en JUnit4
&Parm1=nullvalue(&Parm1)       // se repite por
// cada parámetro del procedure llamado.
               . . .
            &TestResult="F"
      // End Setup
 
      NombreDeProcedureaTestear.call(...) // = @Test  en JUnit4
// En NombreDeProcedureaTestear va el nombre del procedure a testear que da lugar ?genera- el objeto TestCase.
// En los parámetros van &Parm1 a &parmN inicializados
// previamente
 
      // Begin AssertEqual &Parametro1 // por cada parámetro de salida
 &ResultParm1=nullvalue(&ResultParm1)
 // Define variable para result.esperado
             &ResultParmn=nullvalue(&ResultParmn)  // el desarrollador asigna el valor esperado a &ResultParmn
 
           
       If &Parm1=&ResultParm1...
           And &ParmN=&ResultParmN // todos los parm.
                  &TestResult="T"
      EndIf
 
      // End AssertEqual &Existe
     
      // Begin TearDown // = @After de JUnit4
// aquí va el código que se ejecuta después de la ejecución del test, por ejemplo para volver la bd a su estado anterior a la ejecución del test
      // End TearDown
 
      Return     
 
notas: a) definición apropiada de variables ParmN y ResultParmN
                      b) commit on exit = no
             
  
Ejemplo de funcionamiento de GxUnit
 
Dado un proc:
 
      VerificoExistencia
 
con parm(in:&Artículo,out:&Existe)
 
El desarrollador modifica el proc TestVerificoExistencia para setear valores para realizar las pruebas
 
Contenido del proc TestVerificoExistencia:
referencias:
en rojo: lo que generaría automáticamente GxUnit
en azul: lo que ingresaría el desarrollador
 
      parm(out:&TestResult);
 
      // Begin Setup // = @Before de JUnit4
               &Articulo="Vino"
               &Existe="N"
            &TestResult="F"
 
      // End Setup
 
      VerificoExistencia.call(&Articulo,&Existe) // = @Test  de JUnit4
 
      &ResultExiste="S"
 
      // Begin AssertEqual &Existe
        If &Existe=&ResultExiste
             &TestResult="T"
        Endif
 
      // End AssertEqual &Existe
     
      // Begin TearDown // = @After de JUnit4
// aquí va el código que se ejecuta después de la ejecución del test, por ejemplo para volver la bd a su estado anterior a la ejecución del test
      // End TearDown
 
      Return     
 
Noviembre 2006
Alejandro Araújo - Uruguay Larre Borges
 
Se han asignado dos grupos de la materia Ingeniería de Software en la Facultad de Ingeniería de la UDELAR, para realizar el proyecto Herramienta para generar pruebas unitarias en GeneXus " GxUnit: Desarrollo de un framework para la prueba unitaria de objetos GeneXus"
Dicho proyecto se desarrollará durante el segundo semestre de 2007, comenzando en la semana del 13 de Agosto.
Agosto 10 de 2007.

 
 
Created: 15 July 2005 11:53 AM by user163 Last update: 11 August 2007 06:57 PM by ularre