🧪 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 com Double.NEGATIVE_INFINITY. Isso garante que qualquer lance positivo substitua o valor inicial na primeira iteração do laço. 🚀


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