🧪 1.7 Testando o que realmente é necessário

Garantimos que nosso algoritmo funciona para lances em ordem crescente (250, 300, 400). Mas a confiança técnica exige uma cobertura mais ampla.

🏗️ Adicionando Novos Cenários

Para cada novo comportamento ou variação de dados relevante, criamos um novo método de teste. Nunca apagamos os testes anteriores; eles são nossa rede de segurança contra regressões.

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.offset;
import org.junit.jupiter.api.Test;
 
public class AvaliadorTest {
 
    @Test
    void deveEntenderLancesEmOrdemCrescente() {
        // ... cenário anterior
    }
 
    @Test
    void deveEntenderLancesEmOrdemCrescenteComOutrosValores() {
        var joao = new Usuario("João");
        var jose = new Usuario("José");
        var maria = new Usuario("Maria");
 
        var leilao = new Leilao("Playstation 5");
        leilao.propoe(new Lance(maria, 1000.0));
        leilao.propoe(new Lance(joao, 2000.0));
        leilao.propoe(new Lance(jose, 3000.0));
 
        var leiloeiro = new Avaliador();
        leiloeiro.avalia(leilao);
 
        assertThat(leiloeiro.getMaiorLance()).isCloseTo(3000.0, offset(0.0001));
        assertThat(leiloeiro.getMenorLance()).isCloseTo(1000.0, offset(0.0001));
    }
}

📉 O Perigo da Redundância

Escrever 20 testes para o mesmo cenário (ex: mudar de 1000 para 1100) é exaustivo e ineficiente. Precisamos identificar os caminhos únicos que o código percorre.

Sniper Testing ⚡

Em vez de atirar para todos os lados com milhares de testes idênticos, aprenda a identificar as Classes de Equivalência — cenários que representam grupos inteiros de entradas possíveis. 🚀


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