El plugin TestInsight « Puro Delphi

Cursos, artículos, noticias y herramientas Delphi VCL (Visual Component Library) / FMX (Firemonkey)

El plugin TestInsight

Últimamente han aparecido una gran cantidad de herramientas, plugins, frameworks y bibliotecas para enriquecer nuestra experiencia al programar con Delphi. Es una pena que muchas de ellas sean desconocidas para la comunidad, porque realmente funcionan muy bien. Intentaremos darlas a reconocer publicando entradas en este blog y recopilando en la sección de Webs, Blogs y heramientas recomendadas.

Cuando se trata de plugins, por lo general busco cosas pequeñas y simples, que hagan una o dos cosas, pero que las hagan muy bien. Uno de estos plugins es TestInsight

Como su nombre sugiere, este plugin esta relacionado con los test o pruebas unitarias. Se trata de un pequeño experto que se integra en el IDE y nos permite correr los test de unidad y ver los resultados, directamente desde el IDE, y no ejecutandolos en un programa externo, que por lo general es una aplicacion de consola. TestInsight no es en si mismo un framework para pruebas unitarias, sino que trabaja en conjunto con los framework que ya estan disponibles en Delphi.

En su página oficial, se puede encontrar el link de descarga y las instrucciones de instalación y utilización. TestInsight es soportado por Delphi desde su versión XE hasta Tokyo, los framework de testing soportados son: DUnit, DUnit2 y DUnitX. Este plugin fue creado y es mantenido por Stefan Glienke.

En esta entrada voy a utilizar DUnitX. Este framework esta incluido en Delphi, a menos que se haya indicado que no se desea instalarlo cuando instalamos el propio Delphi. Es un proyecto open source, y pueden descargar DUnitX desde GitHub, siguiendo este link, aunque el proceso es prácticamente el mismo para cualquiera de las otras dos opciones.

Para comenzar, voy a crear un nuevo proyecto DUnitX: File -> New -> Other -> DUnitX -> DUnitX Project. Aparecerá el siguiente cuadro de dialogo, el cual voy a completar de esta manera:

 

Proyecto DUnitX

Esto nos creará un proyecto con una unidad que se verá de la siguiente manera:

 

Podemos ejecutar esta aplicación y veremos que se trata de una aplicación de consola, y la salida es la siguiente:

 

 

Esto se tiene que repetir cada vez que agregamos un nuevo test, modificamos el código de un test, o el código que estamos testeando. A mí me resulta engorroso ya que me distrae, porque me saca de mi entorno de trabajo; yo solamente quiero saber si el código que escribi es correcto, y si no lo es, que me diga exactamente donde esta fallando.

En este caso los test “pasan” porque no hay ninguna verificación, por eso voy a agregar este código en el método Test2:

No es mi intención profundizar en el framework DUnitX en esta entrada (aunque sí más adelante), pero para el que nunca lo haya utilizado, o quien nunca haya realizado pruebas de unidad, basta con saber que este método simplemente está diciendo: “Ok, este test va a ser correcto cuando el valor de AValue1 sea igual a 1, y al mismo tiempo, el valor de AValue2 sea 2”.

El cómo llegan esos valores a los parámetros AValue1 y AValue2 escapa el alcance de esta entrada, pero la pista está en la declaración del test:

En pocas palabras, se ejecutarán dos casos de prueba para el método “Test2”, uno en el cual los parámetros AValue1 y AValue2 tendrán los valores 1 y 2 respectivamente; y en el otro caso de prueba 3 y 4.

Ahora volvemos a ejecutar la aplicación y esto es lo que deberíamos ver:

Entonces para corregirlo debemos cerrar esta aplicación, y luego buscar en el código la unidad en donde está implementado este test, y luego buscar el método. Tedioso, teniendo en cuenta que en un escenario real seguramente tengamos varias unidades abiertas (las unidades donde están los test y las unidades en donde está el código que implementa la funcionalidad).

Con TestInsight nos podemos olvidar de esa aplicación de consola, y utilizar un experto que se integra en el IDE, como una ventana incrustable, lo que nos permite ver nuestro código y ver el resultado de los test al mismo tiempo, y además, navegar entre los test simplemente haciendo click.

Una vez instalado TestInsight, en nuestro menú del IDE de “View”, veremos una nueva opción, TestInsight Explorer, el cual nos muestra el plugin:

TestInsight Plugin

El siguiente paso consiste a decirle al proyecto que vamos a utilizar el plugin. Esto simplemente se hace desde el inspector de proyectos, dando click derecho sobre nuestro proyecto y seleccionado la opción TestInsight Project:

Al hacerlo, si teníamos el experto a la vista veremos que los botones para ejecutar los test que antes aparecían deshabilitados, ahora se habilitan. Podemos correr los tests desde el propio plugin, o bien utilizando los clásicos Run (F9) y Run without Debugging (Shift+Ctrl+F9). Al hacerlo, ahora veremos que los resultados serán volcados en la ventana de TestInsight: la aplicación de consola ya no se ejecuta y no nos distrae:

 

Como comentaba, a mí me gusta anclar el experto a un costado, aunque también es posible mantenerlo “flotando” donde más nos guste, se puede redimensionar e incluso cerrarlo; al ejecutar los test, él vuelve a aparecer para mostrarnos los resultados.

Vemos que la información que tenemos disponible es la misma que con la aplicación de consola, pero en este caso está presentada dentro de un ListView. La columna “Time” nos indica cuanto tiempo tardo en ejecutar el test. Pueden hacer la prueba modificando el código del método Test1:

La parte jugosa de TestInsight, es que al estar integrado directamente en el IDE, él “conoce” a nuestro código. Si hacemos doble click en alguno de los test que se muestran en el ListView, veremos como el cursor se posiciona directamente en el código, al comienzo del método del test correspondiente; de hecho, si estamos en otra unidad y queremos navegar hacia el test, podemos hacerlo, ya que cambiará al archivo correspondiente. Incluso, si la unidad en cuestión no está abierta en alguna de las pestañas, al hacer doble click se abre la unidad en cuestión. Una pasada.

Vemos que en la parte superior hay un Toolbar con varios botones. Todos ellos tienen ayuda contextual cuando posicionamos el mouse sobre el botón.

 

  1. Limpia la lista de resultados
  2. Ejecuta todos los test
  3. Ejecuta sólo los test seleccionados. Para seleccionar los test que queremos que se ejecuten, debemos marcar el Checkbox correspondiente. El resto de los test aparecerán como “skipped”, y los podremos identificar con el icono de exclamación, como el del botón 8
  4. Ejecuta el test que se encuentra en la posición del cursor en el editor de código fuente
  5. Detiene la ejecución de los tests
  6. Filtrar los test que reportaron alguna advertencia
  7. Filtrar los test que pasaron
  8. Filtrar los test que fueron ignorados (skipped)
  9. En lugar de correr todos los test y luego reportar, al activar esta opción, se reportan los test a medida que se van ejecutando
  10. Habilita un Edit que aparecerá debajo del Toolbar, el cual permite filtrar la lista
  11. Al activar esta opción, se ejecutarán los test continuamente cuando estemos ociosos. Este tiempo se puede configurar yendo a Tools -> Options -> Third Party -> TestInsight
  12. Al activar esta opción, los test serán ejecutados cada vez que guardemos

En la parte inferior del experto, vemos que hay un sumario que nos indica la cantidad de test ejecutados, cuantos pasaron, cuantos fallaron y cuando fue la última vez que los corrimos.

También hay dos botones más que nos permiten cambiar la forma en que se listan los test: Group by Type y Group by Fixture

La primer opción organizará los test según el resultado, es decir, nos agrupará todos los que pasaron, los que fallaron, los ignorados.. y se ve de esta manera:

La segunda nos agrupara los test por su fixture. El fixture no es otra cosa que la clase en donde esta definido el caso de prueba, es decir, el método.

 

Y bueno, creo que no queda mucho más para explorar, ya que como comentaba al principio, me gusta este estilo de plugins que saben hacer una sola cosa pero bien; TestInsight no es para nada complicado, no ofrece una enorme lista de características, prácticamente en un día uno puede descubrir todo lo que se puede hacer con él, pero lo que ofrece es de gran valor, sencillo de utilizar y entender, e incrementa muchísimo la productividad.

Para finalizar les dejo un enlace a una pagina con preguntas frecuentes (en ingles).


2 Comentarios

Escriba un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

  • RSS

  • Categorías

  • Nube de etiquetas

  • Usuario