TDD não é escrever testes depois. É design de código através de testes. Red-Green-Refactor melhora arquitetura e reduz bugs.
Conceitos Principais
Red-Green-Refactor
Red: escreva teste que falha. Green: código mínimo pra passar. Refactor: melhore sem mudar comportamento.
Baby Steps
Testes pequenos e incrementais. Não pule etapas. Commit após cada Green. Progresso mensurável.
Test First
Teste antes da implementação. Define interface antes de código. Força design limpo.
Refactor Seguro
Testes garantem comportamento. Refactor agressivo sem medo. Melhore continuamente.
Passo a Passo
- Red: Teste Falha: test("POST /users cria usuário", async () => { const res = await request(app).post("/users").send({name: "John"}); expect(res.status).toBe(201); });
- Green: Implementação Mínima: app.post("/users", (req, res) => res.status(201).json({id: 1, name: req.body.name})); Teste passa. Commit.
- Refactor: Melhore Código: Extrai controller, service, repository. Testes continuam passando. Arquitetura limpa emerge.
- Mock Database: jest.mock("./db"). Mock apenas I/O externo. Testa lógica isoladamente. Rápido e determinístico.
- Integration Tests: Test DB real em CI. Docker container. Seed data. Testa fluxo completo.
Boas Praticas
Recomendacoes
• Um assert por teste quando possível
• Testes rápidos (< 100ms cada)
• Mock apenas boundaries (DB, APIs)
• Commit após cada Green
• Refactor contínuo
Erros Comuns
Evite estes erros
• Pular etapa Red (implementar antes)
• Código complexo demais no Green
• Não refatorar (código apodrece)
• Mockar tudo (não testa integração)
• Testes lentos (> 1s)
Checklist
- Ciclo Red-Green-Refactor funcionando
- Testes unitários < 100ms
- Mocks de DB configurados
- Integration tests em CI
- Coverage > 90%
- Commits frequentes