AssertJ para Java: Guia Completo de Fluent Assertions
1. O que é e por que usar
AssertJ é uma biblioteca poderosa de fluent assertions (asserções encadeadas) para a linguagem Java, projetada para escrever testes mais legíveis, expressivos e autodocumentados. Diferente do JUnit ou TestNG padrão, que oferecem apenas métodos básicos como assertEquals(a, b), o AssertJ fornece uma API rica com encadeamento de chamadas, tornando o código dos testes semelhante à linguagem natural. Por exemplo, em vez de assertTrue(list.contains("foo")), você escreve assertThat(list).contains("foo").
Por que usar? Primeiro, o AssertJ melhora significativamente a legibilidade dos testes. Quando um desenvolvedor vê assertThat(result).isNotNull().hasSize(5).contains("esperado"), ele entende imediatamente o que está sendo verificado: o resultado não é nulo, o tamanho é 5 e contém a string "esperado". Segundo, o AssertJ fornece mensagens de erro detalhadas. Em vez do chato "esperado true mas foi false", você recebe "Esperava que a lista contivesse 'foo' mas não foi encontrado em [bar, baz]". Terceiro, a biblioteca suporta diversos tipos de dados: coleções, strings, números, datas, arquivos, exceções e até objetos personalizados.
O AssertJ é especialmente útil em projetos onde a manutenção dos testes é importante. Graças à API fluente, os testes se tornam menos frágeis durante refatorações, pois as cadeias de métodos são fáceis de modificar. A biblioteca é ativamente desenvolvida, possui excelente documentação e é amplamente utilizada na indústria (Spring, Hibernate, Netflix, entre outros).
2. Instalação
O AssertJ é distribuído através do Maven Central. Para usar no seu projeto, adicione a dependência no seu pom.xml (Maven) ou build.gradle (Gradle).
Maven
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.25.3</version> <!-- Verifique a versão mais recente no Maven Central -->
<scope>test</scope>
</dependency>
Gradle
testImplementation 'org.assertj:assertj-core:3.25.3'
Se você usa JUnit 5, nenhuma dependência adicional é necessária. Para JUnit 4, o AssertJ também funciona sem problemas. Certifique-se de que a versão do AssertJ seja compatível com sua versão do Java (a versão 3.x requer Java 8 ou superior).
3. Início rápido — exemplo mínimo funcional
Após adicionar a dependência, você pode começar a usar o AssertJ imediatamente. O método principal é assertThat(), que recebe um objeto e retorna o objeto de asserção correspondente.
import static org.assertj.core.api.Assertions.assertThat;
import org.junit.jupiter.api.Test;
public class QuickStartTest {
@Test
void testSimpleAssertion() {
String nome = "AssertJ";
// Asserção básica
assertThat(nome)
.isNotNull()
.isNotEmpty()
.startsWith("Ass")
.endsWith("J")
.hasSize(7);
// Verificação de números
int numero = 42;
assertThat(numero)
.isPositive()
.isGreaterThan(40)
.isLessThan(50);
// Verificação de coleções
var lista = java.util.List.of("a", "b", "c");
assertThat(lista)
.hasSize(3)
.contains("a", "b")
.doesNotContain("z");
}
}
Este exemplo demonstra a ideia central: uma cadeia de métodos, onde cada um retorna o mesmo objeto de asserção, permitindo escrever verificações sequenciais. Se qualquer asserção falhar, o teste é interrompido com uma mensagem clara.
4. Principais métodos/funções/classes
O AssertJ oferece centenas de métodos. Abaixo estão os 8 mais utilizados, com assinaturas, descrições e exemplos.