🧪 Praticando Test-Driven Development (TDD)

O TDD (Test-Driven Development) inverte o fluxo tradicional de desenvolvimento. Em vez de escrevermos a lógica e depois os testes, o teste precede a implementação. Mas antes de mergulharmos no ciclo, vamos observar uma classe de domínio central e identificar as oportunidades de evolução técnica.

🏗️ Domínio: A Classe Leilao

Imagine a classe Leilao. No modelo tradicional, ela pode ser escrita sem nenhuma cobertura de teste inicial. Vamos estruturá-la seguindo os padrões de Clean Code e as novas funcionalidades do Java 17.

📄 src/main/java/…/dominio/Leilao.java

import java.util.*;
 
public class Leilao {
    private String descricao;
    private List<Lance> lances;
 
    public Leilao(String descricao) {
        this.descricao = descricao;
        this.lances = new ArrayList<>();
    }
 
    public void propoe(Lance lance) {
    // Regra de negócio emergente: Adicionando lances de forma segura
    lances.add(lance);
}
    public String getDescricao() { return descricao; }
 
    /**
     * Retorna uma visualização imutável para garantir o encapsulamento (OCP).
     */
    public List<Lance> getLances() {
        return Collections.unmodifiableList(lances);
    }
}

Regra de Ouro da Indentação 🧭

Utilize sempre 4 espaços para blocos internos. Em Java 17, a clareza visual é reforçada por estruturas como o operador diamante (<>) e a inferência de tipos (var), que reduzem o ruído visual.


🛠️ O Próximo Passo

Como esta classe não possui testes, qualquer alteração na lógica de propoe (como impedir lances consecutivos do mesmo usuário) é um risco de regressão imediato. No próximo estágio, aplicaremos o ciclo sagrado: Red Green Refactor. 🚀


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