🧪 Testes de Domínio: O Fundamento da Qualidade
A classe Leilao é o coração do nosso sistema. O método propoe() contém as regras de negócio mais valiosas e, por isso, deve ser protegido por uma suíte de testes resiliente.
🔬 Cenários de Teste Iniciais
Vamos validar se os lances são armazenados corretamente sob condições normais. Usaremos o JUnit 5 e o AssertJ para garantir expressividade máxima.
📄 src/test/java/…/servico/LeilaoTest.java
import static org.assertj.core.api.Assertions.assertThat;
import org.junit.jupiter.api.Test;
import com.empresa.dominio.*;
class LeilaoTest {
@Test
void deveReceberUmLance() {
var leilao = new Leilao("Macbook Pro 16");
assertThat(leilao.getLances()).isEmpty();
leilao.propoe(new Lance(new Usuario("Steve Jobs"), 2000.0));
assertThat(leilao.getLances()).hasSize(1);
assertThat(leilao.getLances().get(0).getValor()).isEqualTo(2000.0);
}
@Test
void deveReceberVariosLances() {
var leilao = new Leilao("Macbook Pro 16");
leilao.propoe(new Lance(new Usuario("Steve Jobs"), 2000.0));
leilao.propoe(new Lance(new Usuario("Steve Wozniak"), 3000.0));
assertThat(leilao.getLances()).hasSize(2);
assertThat(leilao.getLances().get(0).getValor()).isEqualTo(2000.0);
assertThat(leilao.getLances().get(1).getValor()).isEqualTo(3000.0);
}
}🛡️ Regras de Negócio Emergentes
Agora, o negócio exige restrições mais robustas para evitar fraudes ou spam de lances:
- Padrão de Sequência: Um usuário não pode dar dois lances seguidos.
- Padrão de Frequência: Um usuário não pode dar mais de cinco lances no mesmo leilão.
Dívida Técnica Imunizada 🛡️
Implementar estas regras sem o apoio dos testes tornaria o código “blindado contra mudanças”. Com o JUnit 5, criamos uma rede de segurança que nos permite evoluir a lógica com total tranquilidade. 🚀