🏗️ 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):
- Arrange (Montagem): Prepara o cenário e os dados.
- Act (Ação): Executa o comportamento sob teste.
- 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.printlnem asserções de verdade. 🏁