🧼 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. 🏁