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
También en la biblioteca
Valgrind para C++: guía completa con ejemplos prácticos
Registro para JavaScript (Node.js): las mejores soluciones
Cliente OAuth para TypeScript: integración de autorización en aplicaciones web
Envío de SMS en Java: Resumen y ejemplos de uso de bibliotecas API (Twilio, Nexmo)
Framework CLI para C# (.NET): System.CommandLine y Spectre.Console