Pruebas en Java: revisión de frameworks y herramientas
Las pruebas de calidad son una parte esencial del desarrollo profesional en Java. Sin pruebas automatizadas, es difícil mantener proyectos grandes, implementar nuevas funciones y evitar errores de regresión. En este artículo, analizaremos las herramientas y frameworks clave para probar aplicaciones Java: desde pruebas unitarias hasta verificaciones de integración y automatización de UI.
¿Por qué es importante probar el código Java?
Las pruebas permiten:
- Detectar errores en las primeras etapas del desarrollo.
- Simplificar la refactorización: ves inmediatamente qué se ha roto.
- Documentar el comportamiento del código.
- Automatizar la verificación de regresiones en cada commit.
JUnit 5 — la base de las pruebas unitarias
JUnit 5 es el estándar de facto para pruebas unitarias en Java. Consta de tres módulos: JUnit Platform, JUnit Jupiter y JUnit Vintage. Jupiter proporciona un nuevo modelo de programación con anotaciones y extensiones.
Ejemplo básico de prueba con JUnit 5:
import org.junit.jupiter.api.Test;import static org.junit.jupiter.api.Assertions.*;
class CalculatorTest { @Test void testAddition() { Calculator calc = new Calculator(); assertEquals(5, calc.add(2, 3), "2 + 3 debería ser 5"); }}Mockito — creación de stubs y mocks
Al probar, a menudo es necesario aislar una clase de sus dependencias (base de datos, APIs externas). Mockito permite crear objetos mock y definir su comportamiento.
Ejemplo de uso de Mockito con JUnit 5:
import org.junit.jupiter.api.Test;import org.junit.jupiter.api.extension.ExtendWith;import org.mockito.InjectMocks;import org.mockito.Mock;import org.mockito.junit.jupiter.MockitoExtension;import static org.mockito.Mockito.*;
@ExtendWith(MockitoExtension.class)class UserServiceTest { @Mock private UserRepository repository;
@InjectMocks private UserService service;
@Test void testFindUser() { when(repository.findById(1L)).thenReturn(new User("Alice")); User result = service.findUser(1L); assertEquals("Alice", result.getName()); verify(repository).findById(1L); }}TestNG — alternativa a JUnit con capacidades ampliadas
TestNG (Test Next Generation) es un framework inspirado en JUnit, pero que añade soporte para grupos de pruebas, parametrización, dependencias y ejecución paralela. Es especialmente popular en proyectos grandes y en pruebas de integración.
Ejemplo de prueba parametrizada en TestNG:
import org.testng.annotations.DataProvider;import org.testng.annotations.Test;import static org.testng.Assert.assertEquals;
public class ParamTest { @DataProvider(name = "numbers") public Object[][] data() { return new Object[][] { {1, 2, 3}, {0, 0, 0}, {-1, 1, 0} }; }
@Test(dataProvider = "numbers") public void testAdd(int a, int b, int expected) { assertEquals(a + b, expected); }}Selenium — automatización de interfaces web
Para probar aplicaciones web Java (por ejemplo, en Spring Boot), a menudo se utiliza Selenium WebDriver. Permite emular acciones del usuario en el navegador: clics, ingreso de texto, verificación de elementos.
Ejemplo mínimo de prueba con Selenium:
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.chrome.ChromeDriver;import org.junit.jupiter.api.Test;
public class LoginTest { @Test public void testLoginPage() { WebDriver driver = new ChromeDriver(); driver.get("https://example.com/login"); driver.findElement(By.id("username")).sendKeys("admin"); driver.findElement(By.id("password")).sendKeys("pa También en la biblioteca
Zap / Logrus para Go: guía completa con ejemplos
HtmlAgilityPack para C# (.NET): guía completa con ejemplos