Ir al contenido principal

Tests dinámicos con JUnit5

 


Hoy os quiero hablar de los test dinámicos.

Cuando pensamos en realizar test, normalmente tenemos muy claro las funcionalidades que queremos comprobar, pero a veces esas funcionalidades varían con el paso del tiempo, y nuestras pruebas tienen que adaptarse a estos cambios.

Aquí es donde entran en juego los test dinámicos.

Os voy a poner un par de ejemplos de este tipo de test:

  1. Imaginaros que tenéis que chequear un menú dentro de una pagina web, y ese menú actualmente tiene 4 opciones. Puede pasar que dentro de unos meses las opciones aumenten. Un test dinámico, primero leerá todas las opciones que tiene el menú, y después realizará las pruebas establecidas por cada una de ellas.
  2. Pensar en una base de datos que se carga todos los días a las 03:00 AM, y a las 04:00 AM se lanzan una serie de consultas de BBDD para verificar que la información es correcta. Imaginaros que algunas consultas se leen de un directorio que contiene ficheros *.QRY en los cuales están las consultas y el número de registros que se deben devolver. Un test dinámico primero procesará el directorio, para leer cada fichero, después lanzará tantos test como consultas haya leído en cada fichero.
Espero que con esto os hayáis hecho una idea.

Ahora vamos con un ejemplo funcionando con JUnit5.

En este repositorio hemos creado un proyecto con este tipo de Test: 


En concreto en la clase Dynamic_Basic_Test.

Si le echáis un ojo veréis que sólo tenemos dos métodos.

getData()

private Integer[] getData() 
{
	List<Integer> list = new ArrayList<Integer>();
	list.add(1);
	list.add(0);
	list.add(1);
	Integer[] array = list.toArray(new Integer[0]);
	return array;
}


Es el encargado de ir a por la información a testear en este caso, genera un array de 0 y 1. 

dynamicTestsFromCollection()

Stream<DynamicNode> dynamicTestsFromCollection() 
{
	return Stream.of(getData())
		.map(number -> DynamicContainer.dynamicContainer("True or False Test" + number, Stream.of(
			DynamicTest.dynamicTest("is  " + number + " true?", () -> assertTrue(Util.checkOne(number))),
			DynamicTest.dynamicTest("is  " + number + " false?", () -> assertFalse(Util.checkOne(number))))));
}

Esta es la factoría que se va encargar de realizar los test por cada uno de los elementos generados en getData().

En este caso hemos hecho que por cada elemento chequee si es true y si false. Es decir por dos pruebas.

Como estamos haciendo que devuelva [1,0,1] se generan 6 test:
  1. Test OK (1 es true)
  2. Test KO (1 es false)
  3. Test KO (0 es true)
  4. Test OK (0 es false)
  5. Test OK (1 es true)
  6. Test KO (0 es false)
Espero que os sean muy útil, ya os digo que por aquí los utilizamos un muchísimo y ahora con JUnit 5 el código a utilizar se ha reducido bastante.

Nos vemos pronto.

Entradas populares de este blog

Spring Boot: Página inicial con Bootstrap

  Este es el segundo artículo de la serie sobre Spring Boot que comenzamos hace dos semanas, si quieres ver el primero puedes acceder pulsando aquí . En el primer artículo vimos cómo descargar nuestro proyecto configurado para nuestros intereses y listo para ser importado en nuestro IDE (nosotros usaremos Eclipse ). Lo primero que vamos a hacer es importar el proyecto: File -> Import Existing Maven Projects Seleccionamos el fichero pom.xml en la carpeta donde lo hemos descomprimido y esperamos unos segundos Cuando acabe la importación, esta es la estructura que nos aparecerá: Con Spring Boot no necesitamos configurar el servidor, ya se encarga él de facilitarnos la vida. Lo único que tenemos que hacer es arrancar la clase BootApplication.java , que se encargará de arrancar Tomcat y dejar nuestra aplicación funcionando en el puerto 8080.  Y si todo fuera bien, podríamos acceder a través de la URL:  http://localhost:8080/ Pero ahora mismo tenemos un error de conexión c...

Un bot con Telegram en Termux

En las últimas semanas he retomado un par de ideas que tuve hace algunos años: por un lado la idea de hacer un Bot con el que hacer operaciones a través de comandos específicos. En concreto me gustaría hacer poder realizar comandos de inversión en bolsa (de manera ficticia) por otro lado desplegar la aplicación en un móvil con Termux (emulador de Linux para Android) Así que os cuento los pasos que he hecho para realizar estas tareas. Creación de Bot con Telegram Busca el contacto @BotFather (es el bot oficial de Telegram para crear otros Bots). Pulsa en Iniciar o escribe /start para comenzar. Escribe el comando: /newbot BotFather te pedirá que le pongas un nombre visible a tu Bot. Ejemplo: Nombre: MiBotJava Luego te pedirá un username único que termine en Bot. Ejemplo: Username: MiBotJava_bot Si el nombre de usuario está disponible, te dará un mensaje de éxito. Obtén el token Después de crear el Bot, BotFather te dará un mensaje como este: Done! Congratulations on your new bot. You wil...

Redirección de puertos en Virtual Box

Continuando con mis anteriores "posts", vamos a terminar nuestro entorno de pruebas redirigiendo los puertos que nos interesan de la máquina virtual a nuestro PC. Con Virtual Box podemos configurar la red de diversas formas, una de ellas es redireccionar los puertos de la máquina virtual a la nuestra. Es bastante fácil y rápido de configurar, y lo que hace es que tengamos unos puertos destinados al entorno de desarrollo y otros para el entorno de pruebas. Ejemplo de uso:  - podemos usar el puerto 8080 para desarrollar en eclipse en nuestro entorno de desarrollo con Tomcat. - usaremos el puerto 80 para el Tomcat del entorno de pruebas Más adelante veremos cómo configurar las redes de virtual box para que sean máquinas independientes conectadas a nuestra red y más opciones. Vamos a hacer la redirección del puerto 22 para poder acceder a nuestra máquina virtual a través de uno de los clientes ssh más extendidos (y con nombre controvertido): ...