🧼 1.14 Higiene e Manutencibilidade: Cuidando dos seus Testes

A segurança e a qualidade do código de produção dependem diretamente da saúde da sua suíte de testes. Lembre-se: Teste também é código. Se o seu código de teste for difícil de manter, ele se tornará um fardo técnico que impedirá a evolução do software.

🏗️ O Problema da Duplicação (DRY nos Testes)

Repetir a instanciação do Avaliador e dos Usuarios em todos os métodos cria um acoplamento frágil. Se o construtor mudar, o custo de manutenção será altíssimo.


🔄 O Ciclo de Vida: Anotação @BeforeEach (JUnit 5)

O JUnit 5 oferece o @BeforeEach para centralizar a inicialização. Este método é executado automaticamente pelo framework antes de cada teste individual.

📄 Exemplo Premium: Configuração Limpa

import static org.assertj.core.api.Assertions.assertThat;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
 
class AvaliadorTest {
    private Avaliador leiloeiro;
    private Usuario joao;
    private Usuario maria;
 
    @BeforeEach
    void setUp() {
        this.leiloeiro = new Avaliador();
        this.joao = new Usuario("João");
        this.maria = new Usuario("Maria");
    }
 
    @Test
    void deveEntenderLancesEmOrdemCrescente() {
        var leilao = new Leilao("Playstation 5");
        leilao.propoe(new Lance(joao, 250.0));
        leilao.propoe(new Lance(maria, 400.0));
 
        leiloeiro.avalia(leilao);
 
        assertThat(leiloeiro.getMaiorLance()).isEqualTo(400.0);
        assertThat(leiloeiro.getMenorLance()).isEqualTo(250.0);
    }
}

📊 Arquitetura de Execução JUnit 5

sequenceDiagram
    participant J as Jupiter Runner
    participant T as Classe de Teste
    
    J->>T: @BeforeEach (setUp)
    J->>T: @Test (teste 1)
    J->>T: @BeforeEach (setUp)
    J->>T: @Test (teste 2)
    Note over J,T: Isolamento Total (Fresh Instance)

Foco na Regra de Negócio ⚡

Ao mover a inicialização para o @BeforeEach, seu método de teste foca apenas no que importa: a Validação do Comportamento. 🚀


Independência dos Testes ⚡

O JUnit garante que cada teste receba um ambiente limpo. Isso evita o efeito colateral (side-effects) onde um teste passa ou falha dependendo da execução do teste anterior. 🏁


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