Pruebas en Java: frameworks y herramientas (JUnit, TestNG, Mockito)

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Pruebas en Java: resumen de frameworks y herramientas



Las pruebas de calidad son una parte esencial del desarrollo en Java. Los frameworks modernos permiten automatizar la verificación del código, detectar errores en etapas tempranas y garantizar la estabilidad de la aplicación. En este artículo, revisaremos las herramientas clave para pruebas unitarias, mocking y pruebas de integración en Java, además de proporcionar ejemplos prácticos de su uso.



1. JUnit 5 — el estándar de pruebas unitarias



JUnit 5 (Jupiter) es el framework más popular para pruebas modulares en Java. Proporciona anotaciones para definir métodos de prueba, gestionar el ciclo de vida y la parametrización.



Anotaciones principales de JUnit 5:

  • @Test — marca un método de prueba
  • @BeforeEach / @AfterEach — se ejecutan antes/después de cada prueba
  • @BeforeAll / @AfterAll — se ejecutan una vez para toda la clase
  • @ParameterizedTest — para pruebas con diferentes datos de entrada


Ejemplo de una prueba simple:

import org.junit.jupiter.api.Test;import static org.junit.jupiter.api.Assertions.*;

public class CalculatorTest {

@Test void testAddition() { Calculator calc = new Calculator(); assertEquals(5, calc.add(2, 3)); }

@Test void testDivisionByZero() { Calculator calc = new Calculator(); assertThrows(ArithmeticException.class, () -> calc.divide(10, 0)); }}


2. TestNG — alternativa con capacidades avanzadas



TestNG (Test Next Generation) es otro potente framework, inspirado en JUnit, pero que ofrece funciones adicionales: agrupación de pruebas, pruebas dependientes, ejecución paralela y configuraciones flexibles mediante XML.



Características distintivas de TestNG:

  • @Test(groups = {"smoke"}) — agrupación de pruebas
  • @DataProvider — paso de datos a las pruebas
  • @Test(dependsOnMethods = {"methodA"}) — dependencias entre pruebas


Ejemplo con DataProvider:

import org.testng.annotations.DataProvider;import org.testng.annotations.Test;import static org.testng.Assert.assertEquals;

public class DataDrivenTest {

@DataProvider(name = "testData") public Object[][] createData() { return new Object[][] { { 1, 2, 3 }, { 5, -3, 2 }, { 0, 0, 0 } }; }

@Test(dataProvider = "testData") public void testAdd(int a, int b, int expected) { Calculator calc = new Calculator(); assertEquals(calc.add(a, b), expected); }}


3. Mockito — creación de simulaciones (mocks)



Mockito es una biblioteca para crear objetos mock en Java. Permite aislar el componente bajo prueba de sus dependencias (bases de datos, servicios externos) y verificar la interacción entre objetos.



Funcionalidades principales de Mockito:

  • mock() — creación de un objeto mock
  • when().thenReturn() — definición de comportamiento
  • verify() — verificación de llamadas a métodos
  • @Mock y @InjectMocks — inyección automática de mocks


Ejemplo de uso de Mockito:

import static org.mockito.Mockito.*;import org.junit.jupiter.api.Test;

public class UserServiceTest {

@Test void testGetUser() { // Creamos un mock para el repositorio UserRepository mockRepo = mock(UserRepository.class); when(mockRepo.findById(1L)).thenReturn(new User("Alice"));

UserService service = new UserService(mockRepo); User user = service.getUser(1L);

assertEquals("Alice", user.getName()); verify(mock

Recommendations