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

testImplementation 'org.springframework.boot:spring-boot-starter-test'

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

public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }
}

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étodo testAdd 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

mvn test

Gradle

./gradlew test

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

  1. Crea una clase MathUtils con los siguientes métodos:

    • int multiply(int a, int b): Devuelve el producto de a y b.
    • int divide(int a, int b): Devuelve el cociente de a dividido por b.
  2. Escribe una clase de prueba MathUtilsTest que contenga pruebas unitarias para los métodos multiply y divide.

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

Módulo 2: Conceptos Básicos de Spring Boot

Módulo 3: Construyendo Servicios Web RESTful

Módulo 4: Acceso a Datos con Spring Boot

Módulo 5: Seguridad en Spring Boot

Módulo 6: Pruebas en Spring Boot

Módulo 7: Funciones Avanzadas de Spring Boot

Módulo 8: Despliegue de Aplicaciones Spring Boot

Módulo 9: Rendimiento y Monitoreo

Módulo 10: Mejores Prácticas y Consejos

© Copyright 2024. Todos los derechos reservados