🧪 1.1 Um código qualquer
Para ilustrar a importância dos testes, imagine que trabalhamos em um sistema de leilão de alta performance. Nesse sistema, um componente crítico é responsável por identificar o maior lance de um pregão.
Observe a implementação inicial desta lógica:
public class Avaliador {
private double maiorDeTodos = Double.NEGATIVE_INFINITY;
public void avalia(Leilao leilao) {
for (Lance lance : leilao.getLances()) {
if (lance.getValor() > maiorDeTodos) {
maiorDeTodos = lance.getValor();
}
}
}
public double getMajorLance() {
return maiorDeTodos;
}
}Tradicionalmente, testaríamos isso criando uma classe com um método main:
public class TesteDoAvaliador {
public static void main(String[] args) {
// Cenário: 3 lances em ordem variada
var joao = new Usuario("João");
var jose = new Usuario("José");
var maria = new Usuario("Maria");
var leilao = new Leilao("Playstation 5 Digital Edition");
leilao.propoe(new Lance(joao, 300.0));
leilao.propoe(new Lance(jose, 400.0));
leilao.propoe(new Lance(maria, 250.0));
var leiloeiro = new Avaliador();
leiloeiro.avalia(leilao);
// Saída esperada: 400.0
System.out.println(leiloeiro.getMajorLance());
}
}O Dilema do Ponto Flutuante ⚙️
Note que a variável
maiorDeTodosé inicializada comDouble.NEGATIVE_INFINITY. Isso garante que qualquer lance positivo substitua o valor inicial na primeira iteração do laço. 🚀