AssertJ para Java: guía completa con ejemplos prácticos

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

AssertJ para Java: Guía completa de Fluent Assertions

1. ¿Qué es y para qué sirve?

AssertJ es una potente librería de fluent assertions (afirmaciones fluidas) para Java, diseñada para escribir tests legibles, expresivos y autodocumentados. A diferencia de JUnit o TestNG estándar, que solo ofrecen métodos básicos como assertEquals(a, b), AssertJ proporciona una API rica con encadenamiento de llamadas, haciendo que el código de los tests se asemeje al lenguaje natural. Por ejemplo, en lugar de assertTrue(list.contains("foo")), escribes assertThat(list).contains("foo").

¿Para qué sirve? Primero, AssertJ mejora enormemente la legibilidad de los tests. Cuando un desarrollador ve assertThat(resultado).isNotNull().hasSize(5).contains("esperado"), entiende al instante lo que se verifica: el resultado no es nulo, su tamaño es 5 y contiene la cadena "esperado". Segundo, AssertJ ofrece mensajes de error detallados. En lugar del aburrido "expected true but was false", obtienes "Expected list to contain 'foo' but could not find it in [bar, baz]". Tercero, la librería soporta múltiples tipos de datos: colecciones, cadenas, números, fechas, archivos, excepciones e incluso objetos personalizados.

AssertJ es especialmente útil en proyectos donde el mantenimiento de la base de tests es crucial. Gracias a su API fluida, los tests son menos frágiles durante la refactorización, ya que las cadenas de métodos se modifican fácilmente. La librería se desarrolla activamente, cuenta con una excelente documentación y es ampliamente utilizada en la industria (Spring, Hibernate, Netflix, entre otros).

2. Instalación

AssertJ se distribuye a través de Maven Central. Para usarlo en tu proyecto, agrega la dependencia en tu pom.xml (Maven) o build.gradle (Gradle).

Maven

<dependency>
    <groupId>org.assertj</groupId>
    <artifactId>assertj-core</artifactId>
    <version>3.25.3</version> <!-- Verifica la versión más reciente en Maven Central -->
    <scope>test</scope>
</dependency>

Gradle

testImplementation 'org.assertj:assertj-core:3.25.3'

Si usas JUnit 5, no necesitas dependencias adicionales. Para JUnit 4, AssertJ también funciona sin problemas. Asegúrate de que la versión de AssertJ sea compatible con tu versión de Java (3.x requiere Java 8 o superior).

3. Inicio rápido: ejemplo mínimo funcional

Después de agregar la dependencia, puedes empezar a usar AssertJ de inmediato. El método principal es assertThat(), que recibe un objeto y devuelve el objeto de aserción correspondiente.

import static org.assertj.core.api.Assertions.assertThat;

import org.junit.jupiter.api.Test;

public class InicioRapidoTest {

    @Test
    void testAserciónSimple() {
        String nombre = "AssertJ";
        
        // Afirmación básica
        assertThat(nombre)
            .isNotNull()
            .isNotEmpty()
            .startsWith("Ass")
            .endsWith("J")
            .hasSize(7);
        
        // Verificación de números
        int numero = 42;
        assertThat(numero)
            .isPositive()
            .isGreaterThan(40)
            .isLessThan(50);
        
        // Verificación de colecciones
        var lista = java.util.List.of("a", "b", "c");
        assertThat(lista)
            .hasSize(3)
            .contains("a", "b")
            .doesNotContain("z");
    }
}

Este ejemplo muestra la idea clave: una cadena de métodos, donde cada uno devuelve el mismo objeto de aserción, permitiendo escribir verificaciones secuenciales. Si alguna afirmación falla, el test se detiene con un mensaje claro.

4. Métodos/funciones/clases principales

AssertJ proporciona cientos de métodos. A continuación, los 8 más utilizados con sus firmas, descripciones y ejemplos.

4.1. isEqualTo

Recommendations