🏗️ 1.3 O que aconteceu?

Bugs surgem do abismo entre o que achamos que o código faz e o que ele realmente faz. A solução da engenharia moderna não é testar mais manualmente, mas sim transferir essa carga cognitiva para a máquina.

🤖 Automação como Ativo de Segurança

Um teste automatizado de elite segue três fases sagradas (Padrão AAA ou GWT):

  1. Arrange (Montagem): Prepara o cenário e os dados.
  2. Act (Ação): Executa o comportamento sob teste.
  3. Assert (Validação): Verifica se a saída corresponde à expectativa.

Veja como nossa classe de teste evolui para um protótipo de automação:

public class TesteAutomatizadoManual {
    public static void main(String[] args) {
        // GIVEN (Cenário)
        var joao = new Usuario("João");
        var jose = new Usuario("José");
        var maria = new Usuario("Maria");
 
        var leilao = new Leilao("MacBook Pro M3");
 
        leilao.propoe(new Lance(maria, 250.0));
        leilao.propoe(new Lance(joao, 300.0));
        leilao.propoe(new Lance(jose, 400.0));
 
        // WHEN (Ação)
        var leiloeiro = new Avaliador();
        leiloeiro.avalia(leilao);
 
        // THEN (Validação Automática)
        double maiorEsperado = 400;
        double menorEsperado = 250;
 
        System.out.println("Maior OK? " + (maiorEsperado == leiloeiro.getMaiorLance()));
        System.out.println("Menor OK? " + (menorEsperado == leiloeiro.getMenorLance()));
    }
}

Embora automatizado (a máquina executa), este teste ainda é rudimentar. Precisamos de ferramentas que não apenas rodem o código, mas forneçam relatórios ricos, isolamento de falhas e integração contínua.

O Arsenal da Qualidade ⚡

Para resolver este problema de forma profissional, utilizaremos o JUnit 5, o framework de testes mais respeitado do ecossistema Java. Vamos transformar esses System.out.println em asserções de verdade. 🏁


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