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