🧪 1.20 Legibilidade de Elite com AssertJ

A legibilidade dos testes é o que diferencia um “script de validação” de uma especificação técnica executável. Embora o JUnit forneça asserções básicas, o ecossistema moderno consolidou o AssertJ como o padrão ouro para engenharia Java.

🏗️ Por que abandonar o assertEquals?

O assertEquals(esperado, atual) sofre de falta de fluidez. É comum invertermos os parâmetros, gerando mensagens de erro confusas. Além disso, asserções de listas e objetos complexos tornam-se redundantes.

📄 Exemplo: Comparação de Modelos

// SINTAXE JUNIT (Funcional, mas ruidosa)
assertEquals(400.0, leiloeiro.getMaiorLance(), 0.0001);
 
// SINTAXE ASSERTJ (Expressiva e próxima da linguagem natural)
assertThat(leiloeiro.getMaiorLance()).isEqualTo(400.0);

⚡ O Poder das Asserções Fluídas

O AssertJ permite encadear verificações, tornando o código de teste extremamente conciso.

📄 Validando Coleções (Listas)

Imagine verificar se os 3 maiores lances estão corretos. Com JUnit/Hamcrest, você teria múltiplos loops ou asserts. Com AssertJ:

@Test
void deveEncontrarOsMaioresLances() {
    // ... setup ...
    var maiores = leiloeiro.getTresMaiores();
 
    assertThat(maiores).hasSize(3)
            .extracting(Lance::getValor)
            .containsExactly(400.0, 300.0, 200.0);
}

Adeus Hamcrest ⚙️

Embora o Hamcrest (assertThat(x, equalTo(y))) tenha sido popular, o AssertJ venceu a batalha pela preferência dos desenvolvedores devido ao seu Autocomplete Superior e APIs mais ricas para Java 17. 🚀


🛠️ Matchers Customizados e Auto-descritivos

Se o seu teste falhar, o AssertJ fornece um relatório minucioso do que foi recebido vs o que era esperado, facilitando o “Fix” imediato sem precisar de DEBUG.

Dica de Ouro: IDE Autocomplete ⚡

Digite assertThat(objeto). e deixe que a IDE lhe mostre todas as possibilidades de validação (isNotNull, contains, startsWith, hasFieldOrProperty). Isso aumenta drasticamente a velocidade de escrita dos testes. 🏁


⬅️ Capítulo Anterior | Próximo Capítulo ➡️