JUnit 5 - Cómo ejecutar tests unitarios en Maven
Introducción
En este artículo, te mostraré cómo puedes configurar tu proyecto Apache Maven para ejecutar tests JUnit 5 (o JUnit 4) usando el Maven Surefire plugin.
Apache Maven es una herramienta de automatización de construcción diseñada especialmente para proyectos Java (aunque también puedes utilizarla para otros lenguajes).
Si miramos la página principal de Maven, descubriremos que Maven se basa en plugins para realizar la mayoría de sus tareas. Esto se resume en la siguiente cita:
Maven is -at its heart- a plugin execution framework; all work is done by plugins.
(Maven es -en esencia- un framework de ejecución de plugins; todo el trabajo lo realizan los plugins.)
El plugin de Maven encargado de ejecutar los tests unitarios es el Maven Surefire plugin. Veamos cómo funciona.
Configurando Maven Surefire Plugin
Maven utiliza el Maven Surefire Plugin por defecto cada vez que ejecutamos el goal mvn test
.
Esto significa que ni siquiera necesitamos configurar el plugin para que Maven lo utilice.
Por ejemplo, si consideramos un proyecto base con el siguiente contenido en el fichero pom.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.marcnuri.demo</groupId>
<artifactId>junit5-surefire</artifactId>
<version>0.0-SNAPSHOT</version>
<properties>
<java.source.version>17</java.source.version>
<java.target.version>17</java.target.version>
</properties>
</project>
Al ejecutar el siguiente comando:
mvn test
Deberíamos de ver un mensaje como el siguiente:
[INFO] --- surefire:3.0.0:test (default-test) @ junit5-surefire ---
[INFO] No tests to run.
Como no tenemos tests en el proyecto, obtenemos el mensaje No tests to run
.
Si nos fijamos en los logs, podemos ver que Maven está ejecutando la versión 3.0.0
del plugin Surefire.
Esto es porque estoy ejecutando Maven 3.9.2
que utiliza esta versión del plugin Surefire.
En el futuro, es posible que queramos establecer una versión explícita del plugin o proporcionar más configuraciones.
Para ello, necesitamos declarar una dependencia del plugin en la sección build
del fichero pom.xml
:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.1.2</version>
</plugin>
</plugins>
</build>
Si ejecutamos de nuevo el comando mvn test
, veremos que el plugin Surefire ha cambiado a la versión 3.1.2
:
[INFO] --- surefire:3.1.2:test (default-test) @ junit5-surefire ---
[INFO] No tests to run.
No obstante, todavía no tenemos ningún test que ejecutar. Veamos ahora cómo añadir un test JUnit 5 al proyecto.
Creando tests con JUnit 5
Comencemos por añadir la dependencia de JUnit 5 al fichero pom.xml
de nuestro proyecto:
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.10.0</version>
<scope>test</scope>
</dependency>
</dependencies>
A continuación, creemos un test de ejemplo en el directorio src/test/java
con el nombre ExampleTest.java
:
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertTrue;
class ExampleTest {
@Test
void test() {
assertTrue(true);
}
}
Este es un test muy sencillo que siempre pasará. Lo único que estamos comprobando es que true
es true
.
El nombre de la clase es importante para que el plugin Maven Surefire pueda incluir el test en la ejecución.
En este caso, hemos nombrado la clase ExampleTest
con el sufijo Test
.
Puedes configurar estos sufijos en la configuración del plugin Maven.
Ejecutemos una vez más el comando mvn test
:
[INFO] --- surefire:3.1.2:test (default-test) @ junit5-surefire ---
[INFO] Using auto detected provider org.apache.maven.surefire.junitplatform.JUnitPlatformProvider
[INFO]
[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] Running ExampleTest
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.032 s -- in ExampleTest
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
El plugin detecta correctamente el test que acabamos de implementar y lo ejecuta por nosotros. El plugin Surefire también muestra un informe muy sencillo con el nombre de la clase de test y los resultados del su ejecución.
Conclusión
En este artículo, te he mostrado cómo puedes configurar tu proyecto Maven para ejecutar tests unitarios JUnit 5 (o JUnit 4) usando el plugin Maven Surefire. Esta configuración es la más básica que te permitirá añadir complejidad en el futuro.