🧪 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. 🚀