Renovado interés en GXUnit

En el año 2003 (hace ya 14 años!!) empecé este blog con un artículo sobre una herramienta que llamé GXUnit. 

Durante varios años hice un esfuerzo junto con otros compañeros de la comunidad de sacar el producto adelante, para que sirviera para lograr usar el testeo unitario dentro del ciclo de desarrollo con GeneXus. 

Este año en el #GX27, nace un interés renovado en GXUnit, pues poco a poco la comunidad GeneXus descubre que la metodología TDD o de Integración Continua (CI) o de Instalación Continua (CD) . Es muy bueno que podamos contar de una vez por todas con lo necesario para poder hacer testeo unitario de calidad y sin demasiado esfuerzo.  Hay varias charlas relativas a DevOps, integración continua y aledaños que recomiendo fervientemente. 

Fundamentalmente Lali Aguiar, y Abstracta están haciendo un excelente trabajo para mantener y mejorar la herramienta. 

Una de las cosas que le esta faltan al GXUnit para lograr ser realmente un testeo unitario, es la de poder aislar correctamente al objeto de su entorno, fundamentalmente de las tablas de la base de datos y de las llamadas a otros objetos.  Seria hacer el un "objeto simulado" (en ingles mock) de dichos objetos. 

Supongamos que tenemos que testear un procedure, que lo que hace es un for each que genera una sentencia "Select att1, att2 from table1 where att1 > 10".  Seria bueno contar con un mecanismo que me permita obtener siempre un conjunto de datos, sin tener que ir a la base de datos.

En los lenguajes orientados a objetos, es mas fácil hacer el mock del objeto que devuelve esos datos, para que devuelva algo conocido, sin tener que ir a la base de datos. 

En GeneXus, creo que se podría utilizar la propiedad Database access caching  para poder hacer que el objeto que estoy probando no  tenga que acceder a la base de datos y pueda ejecutar el test unitario en forma rápida. 

La idea primaria, seria poder ejecutar una vez la prueba con acceso a la base y capturar en el cache todas las sentencias ejecutadas y sus resultados. 

Luego seria bueno poder capturar el estado del cache y salvarlo (esto no se puede hacer hoy en día), de forma de poder volver a cargarlo en el futuro. 

Cada vez que voy a ejecutar un test unitario, podría restaurar el cache en el estado que lo necesita dicha prueba, y eso aceleraría muchísimo su ejecución, y aislaría el test de la base de datos, siempre y cuando la sentencia no cambie y se ejecute con los mismos parámetros. 

Es poco lo que falta para tener esto y creo que seria un paso muy bueno para los desarrolladores GeneXus, para ejecutar sin tener que modificar en nada el procedimiento a probar. 

Luego, si quiero ejecutar una prueba de integración, podría utilizar los mismos procedimientos de pruebas unitarias, pero con el cache deshabilitado, para que acceda a la base de datos como se hará en producción. 

Cada vez que pienso en el tema de TDD/CI/CD y encuentro alguien reticente a usarlo a pesar de todas las pruebas de su efectividad, me acuerdo de la anécdota   de los medicos que resistian a lavarse las manos antes de operar. 

Comentarios

  1. Enrique, excelente el post!
    Estamos entusiasmados con aportar con estos temas en el desarrollo GeneXus.
    Comparto porque me parece interesante (espero no se tome a mal) algunos post de Federico sobre el tema de Integración Continua y DevOps
    https://www.federico-toledo.com/continuous-delivery-en-genexus/
    https://www.federico-toledo.com/genexus-y-devops-charla-en-el-encuentro-genexus-gx27/

    Creo que son buenos para ir transmitiendo algunas de las cosas en las que estamos trabajando.

    Saludos!

    ResponderBorrar
    Respuestas
    1. Todo aporte al tema es bienvenido.!

      Creo que se puede lograr un salto en la calidad de los sistemas desarrollados cuando se incorporan estas metodologías, ya probadas en otras plataformas de desarrollo.

      Parece ser que la Comunidad GeneXus llego a la madurez necesaria como para automatizar esta etapa del desarrollo.

      Borrar
  2. Muy buen articulo, GxUnit es una buena herramienta aunque tenemos que mejorla

    ResponderBorrar

Publicar un comentario

1) Lee el post
2) Poné tu opinión sobre el mismo.
Todos los comentarios serán leidos y la mayoría son publicados.

Entradas más populares de este blog

Aplicación monolítica o distribuida?

La nefasta influencia del golero de Cacho Bochinche en el fútbol uruguayo

Funcionalidades de GeneXus que vale la pena conocer: DATE Constants.