Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Noticias Sobre Desarrollo: Test Unitarios En Gambas3
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Noticias Sobre Desarrollo: Test Unitarios En Gambas3 
 
Hoy ha subido un sr. llamado  Adrien Prokopowicz, un componente para crear test unitarios (algunos enlaces: http://es.wikipedia.org/wiki/Prueba_unitaria , http://es.wikipedia.org/wiki/JUnit , http://www.etnassoft.com/2011/07/27...istema-robusto/) , es una versión de pruebas, para que la vea los desarrolladores y que se le añadan al IDE en el futuro.

Os dejo aqui el mensaje y el código que ha subido:

Citar:
Hello everyone !

With the amount of features to test in my various gambas projects, I started feeling that it was a pain to write the tests, run *all* of them, and analyzing their output each time I had to make a change, thus leading to forget to run simple tests (see the last gb.xml issue...).

Therefore, in order to automate and simplify this whole process, I decided to start working on an Unit Testing component for Gambas.

It works quite simply : in your project, just create a class that inherits the UnitTest class, move it inside an "unit" folder in your project source directory, and implement your test in the _Run() method, using the different Assert() and Fail() methods, documented in the component's 'AssertionsTests' test.

To run all the tests at once, just use the _UnitTestLauncher module as the starting class instead of your project's default one (this can be achieved easily using 'gbx3 -s _UnitTestLauncher' inside your project's directory.
Each test is run inside a separate Task, therefore preventing a bad test to crash the whole test suite, and allowing you to easily multi-task it, using 'gbx3 -s _UnitTestLauncher -- -j <number>'.

Inside the attached component, I also made 3 tests, that show how the component handles the different scenarios :

- The 'MyGoodUnitTest' will run fine, but will sleep 0.5s before ending (to show that the component will use another thread to run the other tests, if there is any available, which is not the case by default).
- The 'MyBadUnitTest' will fail because of an (obvious) false assert. It will then show the stack trace of where the error raised, as well as a reason text (or just 'Assertion failed.' by default).
- The 'MyVeryBadUnitTest' will fail because of an error raised by the interpreter, here 'Division by zero'. Note that the result will be similar if the test completely crashes (Segfault...), you just won't have a stack trace available.

Of course this is just a proof of concept, there are a few things i would like to add to properly finish this component, such as a proper IDE integration, a standardized xUnit XML output, tweaking the archiver so the tests won't be in the final executable, maybe its own command (like gbt3) ...

What do you think ?


Esta tarde me lo miro, a ver si puedo hacer algunos ejemplo de como usarlo y hacer algunos test
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Noticias Sobre Desarrollo: Test Unitarios En Gambas3 
 
Tiene que ser interesante el procedimiento de realizar esto en Gambas.

Aun no he llegado a un tema para que trate el Test Unitario en Python.
Pero puedo comentar que existe un modulo o librería llamado doctest.

Lo curioso de este modulo es que aprovecha la documentación de una función "x", sobre todo
los ejemplos dentro de la función que se le añade para comprobar el funcionamiento correcto de cada función.

La ejecución de los test es semiautomático.

Así dicho de alguna manera en un ejemplo en gambas. Si tuviéramos una función como esta:

''Devuelve el número de grados celsius equivalentes a grados fahrenheit
Public Function convertirAcelsius(gfarenheit As Float) As Float
  '>>> convertirAcelsius(32)
  '0
  '>>> convertirAcelsius(212)
  '100
  
  Return (gfarenheit - 32) * 5 / 9
    
End
 


Incluimos en la propia función un test de la misma para comprobar si funciona.
Ese modulo se encargaría de probar esos ejemplos. Si le añadimos un símbolo detrás del comentario seria
una forma de que el modulo reconociera donde se encuentra el test de la función.

Supongo que las pruebas unitarias pueden ir mas allá de esto. Lograríamos testear cada función que tenga nuestro
modulo correspondiente, de una forma aparentemente sencilla.

Para nosotros sería ejecutar manualmente esas llamadas a las funciones con los valores que están en los ejemplos para testear el comportamiento.
Cosa que haría el modulo por nosotros.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Noticias Sobre Desarrollo: Test Unitarios En Gambas3 
 
Bueno, ya me he mirado (por encima) como funciona. Os comento:

La idea de los test unitario, (hablando en plan general) es probar nuestras  funciones y/o metodos.
Esto se hace pasandoles unos valores y comprobando que lo que develven es lo correcto, en el caso contrario, paramos el test y podemos decir que nos muestre algun mensaje personalizado.

Por ejemplo:
Tengo una funcion sumaEnteros en el módulo ModuleOperaciones definida de la siguiente manera:

Quiero comprobar que hace la suma bien,... voy a hacer un test para probarla.

 La prueba va a ser que le paso dos valores: 5 y 8, comprobar que la suma de ambos es 13, y si no es asi, que muestre un mensaje.

Pues la forma de crear el test seria:

0)  Copiamos las clases UnitTest, UniTestTask y el módulo _UnitTestLauncher y creamos una carpeta llamada unit en las fuente de nuestro proyecto


1) Creamos una clase que herede de UnitTest, ya que esta tiene los método _Run y varios del tipo _Assert que son lo que comprueban los test, dentro de la carpeta unit.

' gambas class file

Inherits UnitTest

Public Sub _Run()

  Print "probando mi módulo de operador sumar enteros"
  Me.Assert(ModuleOperaciones.sumaEnteros(5, 8) = 13, "fallo al calcular la suma de enteros")

End
 


Tambien se prodia haber usado el método .AssertEquals
  Me.AssertEquals(ModuleOperaciones.sumaEnteros(5, 8), 13, "fallo al calcular la suma de enteros")


2) Ahora seleccionamos el módulo _UnitTestLauncher.module y hacemos que este sea la "clase de inicio" de nuestro proyecto

3) Ejecutamos el proyecto.
El módulo _uniTestLauncher, tiene la "capacidad" de ejecutar el método _Run de las clases que esten en el directorio unit y que sean herederas de la clase  UnitTest.

4) Se muestra el resultado en la consola:
Citar:
----- Test PruebaModuloOperadorSumaEntero (#1) succeeded -----
        Standard output :
1 tests finished. 1 sucessful tests, 0 failed tests.

Osea todo ha ido bien...

Ahora si escribrimos la siguiente prueba, usando decimales:;
Me.AssertEquals(ModuleOperaciones.sumaEnteros(5, 8.6), 13.6, "fallo al calcular la suma de decimales")


Y ejecutamos el programa, obtenemos el siguiente mensaje:
Citar:
----- Test PruebaModuloOperadorSumaEntero (#1) failed -----
        Reason: fallo al calcular la suma de decimales
        Stack trace :
                PruebaModuloOperadorSumaEntero._Run.10
        Standard output :

Vemos que nuestro test no se cumple, con el mensaje que hemos especificado y la linea dentro del código de nuestro test.


Nota:
El modulo _uniTestLauncher, tiene  la ventaja de que podemos crear tantos test como necesitemos, ya que se van ejecutar todos, informandonos via consola cuales esta correctos y cuales al fallado.


Os dejo aqui mi mini proyecto donde he probado el ejemplo, y ademas estan los ejemplos y documentación de gb.unit.


Tenemos el siguiente esquema del proyecto gb.unit:
 esquemas_unittest
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
última edición por jsbsan el Martes, 09 Diciembre 2014, 21:16; editado 1 vez 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Noticias Sobre Desarrollo: Test Unitarios En Gambas3 
 
Shell:

Citar:
doctest.
Lo curioso de este modulo es que aprovecha la documentación de una función "x", sobre todo
los ejemplos dentro de la función que se le añade para comprobar el funcionamiento correcto de cada función.

Como ves,  Adrien  lo hace de otro modo, creo que es mucho más limpio tener independizado los test del código de la función.


Saludos
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Noticias Sobre Desarrollo: Test Unitarios En Gambas3 
 
Julio:

Citar:

Como ves, Adrien lo hace de otro modo, creo que es mucho más limpio tener independizado los test del código de la función.


De la primer forma no es necesario crear un test unitario si ya compruebas al comienzo que los resultados son los deseados
cuando has terminado de crear la función.

Cuando vi por primera vez como se documentaba la función, ya se añadía un test de la misma.
Este es un vídeo del curso de aprender los fundamentos de programación con Python que trata en este caso
en el diseño del cuerpo de una función.


Link


Es otra forma, a medida que avanzas te van enseñando unas técnicas o buenas costumbres a la hora de programar
con este lenguaje.

Es muy curioso las formas y los cambios que hay de un lenguaje a otro. Nosotros estamos obligados a declarar el tipo
variables que va recibir los parámetros de la función, en cambio en Python no lo es. (cabecera)
A pesar de todo en la documentación se hace referencia el tipo de valores que la función recibe y va a devolver (contrato).

A medida que construimos la aplicación sería una forma rápida de comprobar si la función devuelve lo que pensamos que
tiene que devolver.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Noticias Sobre Desarrollo: Test Unitarios En Gambas3 
 
Shell:

Citar:
  [gambas] estamos obligados a declarar el tipo variables que va recibir los parámetros de la función, en cambio en Python no lo es.


A mi eso no me gusta eso de Python, tampoco me gusta que deje crear variables sin especificar de que tipo es (hay otros lenguajes que tambien hacen lo mismo: javascript por ejemplo) ......deja abierta la puerta futuros errores o malas interpretaciones del código.

 Y lo peor es  que cuando sea un proyecto grande, y  miras su código la primera vez, no sabes (sino esta bien  documentado), que valores admite..... y no te digo nada cuando quieras traducir el programa a otros lenguajes que necesitan que esten fijados los tipos.

La ventaja de trabajar  "sin especificar tipos" es que:
- te ahorras varias lineas de código, al no tener que definir que tipo de variable es. Ideal para hacer pequeños programas.
- te ahorras las clases "interfaces", ya que los métodos admiten "todo lo que le pongan" como valor del  parámetro.


Saludos
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Noticias Sobre Desarrollo: Test Unitarios En Gambas3 
 
Julio:

"Lo ideal" es documentar el programa, pero luego muchos no lo hacemos. Somos muy comodones.

Vamos a hacerlo funcionar y a veces no pasamos de ahí. Todo depende de si queremos compartir ese
código. Como es normal habrá que documentarlo o en caso contrario estar abierto a las personas que lo usen.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
Ocultar¡Este tema fue útil?

 

Elegir valoración:                       

Media de valoración Valoración mínima Valoración máxima Número de valoraciones
0.67 0 1 3
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Un Detalle Sobre El Desarrollo De Una Term... jousseph Aplicaciones/Fragmentos de Código 1 Miercoles, 20 Agosto 2014, 06:44 Ver último mensaje
jousseph
No hay nuevos mensajes Estado Actual De La Versión De Desarrollo... Shell General 5 Jueves, 30 Octobre 2014, 17:27 Ver último mensaje
shordi
No hay nuevos mensajes Componente UnitForm Para Realizas Test Uni... jsbsan Aplicaciones/Fragmentos de Código 0 Miercoles, 24 Diciembre 2014, 15:12 Ver último mensaje
jsbsan
No hay nuevos mensajes Nuevo Desarrollo En Gambas3 mateobadajoz General 10 Miercoles, 01 Enero 2020, 19:46 Ver último mensaje
gambafeliz
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
No puede descargar archivos
No puede publicar eventos en el calendario