Introducción
Las pruebas unitarias son una parte esencial del desarrollo de software, ya que permiten verificar que las unidades individuales de código (como métodos y clases) funcionan correctamente. JUnit es un marco de pruebas unitarias para el lenguaje de programación Java, ampliamente utilizado en la comunidad de desarrollo.
En esta sección, aprenderás a:
- Configurar JUnit en un proyecto Spring Boot.
- Escribir y ejecutar pruebas unitarias básicas.
- Utilizar aserciones para validar el comportamiento del código.
- Ejecutar pruebas con diferentes configuraciones.
Configuración de JUnit en un Proyecto Spring Boot
Para comenzar a usar JUnit en tu proyecto Spring Boot, necesitas agregar las dependencias necesarias en tu archivo pom.xml
(si usas Maven) o build.gradle
(si usas Gradle).
Maven
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>
Gradle
Estas dependencias incluyen JUnit y otras bibliotecas útiles para pruebas, como Mockito y AssertJ.
Escribiendo una Prueba Unitaria Básica
Vamos a escribir una prueba unitaria para una clase simple. Supongamos que tenemos una clase Calculator
con un método add
que suma dos números.
Clase Calculator
Clase de Prueba CalculatorTest
import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; public class CalculatorTest { @Test public void testAdd() { Calculator calculator = new Calculator(); int result = calculator.add(2, 3); assertEquals(5, result, "2 + 3 debería ser 5"); } }
Explicación del Código
@Test
: Esta anotación indica que el métodotestAdd
es un caso de prueba.assertEquals(expected, actual, message)
: Esta aserción verifica que el resultado esperado (5
) es igual al resultado actual (result
). Si no es así, se muestra el mensaje de error proporcionado.
Ejecutando Pruebas
Puedes ejecutar las pruebas unitarias usando tu IDE (como IntelliJ IDEA o Eclipse) o desde la línea de comandos.
Desde el IDE
- En IntelliJ IDEA, haz clic derecho en la clase de prueba y selecciona "Run 'CalculatorTest'".
- En Eclipse, haz clic derecho en la clase de prueba y selecciona "Run As > JUnit Test".
Desde la Línea de Comandos
Maven
Gradle
Utilizando Aserciones
JUnit proporciona varias aserciones para validar el comportamiento del código. Aquí hay algunas de las más comunes:
Aserción | Descripción |
---|---|
assertEquals(expected, actual) |
Verifica que dos valores son iguales. |
assertNotEquals(unexpected, actual) |
Verifica que dos valores no son iguales. |
assertTrue(condition) |
Verifica que una condición es verdadera. |
assertFalse(condition) |
Verifica que una condición es falsa. |
assertNull(object) |
Verifica que un objeto es nulo. |
assertNotNull(object) |
Verifica que un objeto no es nulo. |
assertThrows(expectedType, executable) |
Verifica que se lanza una excepción del tipo esperado. |
Ejemplo de Uso de Aserciones
import static org.junit.jupiter.api.Assertions.*; import org.junit.jupiter.api.Test; public class CalculatorTest { @Test public void testAdd() { Calculator calculator = new Calculator(); int result = calculator.add(2, 3); assertEquals(5, result, "2 + 3 debería ser 5"); } @Test public void testSubtract() { Calculator calculator = new Calculator(); int result = calculator.subtract(5, 3); assertEquals(2, result, "5 - 3 debería ser 2"); } @Test public void testDivideByZero() { Calculator calculator = new Calculator(); assertThrows(ArithmeticException.class, () -> calculator.divide(1, 0), "Dividir por cero debería lanzar ArithmeticException"); } }
Ejercicio Práctico
Ejercicio
-
Crea una clase
MathUtils
con los siguientes métodos:int multiply(int a, int b)
: Devuelve el producto dea
yb
.int divide(int a, int b)
: Devuelve el cociente dea
dividido porb
.
-
Escribe una clase de prueba
MathUtilsTest
que contenga pruebas unitarias para los métodosmultiply
ydivide
.
Solución
Clase MathUtils
public class MathUtils { public int multiply(int a, int b) { return a * b; } public int divide(int a, int b) { if (b == 0) { throw new ArithmeticException("No se puede dividir por cero"); } return a / b; } }
Clase de Prueba MathUtilsTest
import static org.junit.jupiter.api.Assertions.*; import org.junit.jupiter.api.Test; public class MathUtilsTest { @Test public void testMultiply() { MathUtils mathUtils = new MathUtils(); assertEquals(6, mathUtils.multiply(2, 3), "2 * 3 debería ser 6"); } @Test public void testDivide() { MathUtils mathUtils = new MathUtils(); assertEquals(2, mathUtils.divide(6, 3), "6 / 3 debería ser 2"); } @Test public void testDivideByZero() { MathUtils mathUtils = new MathUtils(); assertThrows(ArithmeticException.class, () -> mathUtils.divide(1, 0), "Dividir por cero debería lanzar ArithmeticException"); } }
Conclusión
En esta sección, has aprendido a configurar JUnit en un proyecto Spring Boot, escribir y ejecutar pruebas unitarias básicas, y utilizar aserciones para validar el comportamiento del código. Las pruebas unitarias son fundamentales para asegurar la calidad y la fiabilidad del software, y JUnit es una herramienta poderosa para este propósito.
En el próximo tema, exploraremos las pruebas de integración, que permiten verificar que diferentes componentes del sistema funcionan correctamente juntos.
Curso de Spring Boot
Módulo 1: Introducción a Spring Boot
- ¿Qué es Spring Boot?
- Configuración de tu Entorno de Desarrollo
- Creando tu Primera Aplicación Spring Boot
- Entendiendo la Estructura del Proyecto Spring Boot
Módulo 2: Conceptos Básicos de Spring Boot
- Anotaciones de Spring Boot
- Inyección de Dependencias en Spring Boot
- Configuración de Spring Boot
- Propiedades de Spring Boot
Módulo 3: Construyendo Servicios Web RESTful
- Introducción a los Servicios Web RESTful
- Creando Controladores REST
- Manejo de Métodos HTTP
- Manejo de Excepciones en REST
Módulo 4: Acceso a Datos con Spring Boot
- Introducción a Spring Data JPA
- Configuración de Fuentes de Datos
- Creación de Entidades JPA
- Uso de Repositorios de Spring Data
- Métodos de Consulta en Spring Data JPA
Módulo 5: Seguridad en Spring Boot
- Introducción a Spring Security
- Configuración de Spring Security
- Autenticación y Autorización de Usuarios
- Implementación de Autenticación JWT
Módulo 6: Pruebas en Spring Boot
- Introducción a las Pruebas
- Pruebas Unitarias con JUnit
- Pruebas de Integración
- Simulación con Mockito
Módulo 7: Funciones Avanzadas de Spring Boot
Módulo 8: Despliegue de Aplicaciones Spring Boot
Módulo 9: Rendimiento y Monitoreo
- Ajuste de Rendimiento
- Monitoreo con Spring Boot Actuator
- Uso de Prometheus y Grafana
- Gestión de Registros y Logs