MODULO 3.5

πŸ§ͺ Workflow: Escrever Testes

Domine o workflow completo de geracao de testes com Claude Code: identifique gaps de cobertura, gere testes abrangentes, rode e corrija, e use TDD assistido por IA para alcancar cobertura acima de 80%.

6
Topicos
35
Minutos
Intermediario
Nivel
Teoria + Pratica
Tipo
1

πŸ” Identificando gaps de cobertura

Antes de escrever testes, voce precisa saber o que testar. O Claude Code consegue analisar seu codigo-fonte, identificar funcoes sem cobertura, caminhos nao testados e logica critica exposta. Essa analise inicial e o que separa testes uteis de testes que apenas inflam metricas.

🎯 Conceito Principal

O Claude pode ler seu relatorio de coverage (lcov, istanbul, pytest-cov) e cruzar com o codigo-fonte para identificar exatamente quais funcoes, branches e linhas nao estao cobertas. Mais do que isso, ele prioriza pelo risco do que nao esta testado.

  • β€’ Analise de coverage: Peca ao Claude para ler o relatorio de cobertura e listar as funcoes com 0% de coverage, priorizando as mais criticas
  • β€’ Branches descobertos: Identifique if/else, try/catch e switch/case que so tem um caminho testado - esses sao os maiores pontos cegos
  • β€’ Priorizacao por risco: Funcoes que lidam com dinheiro, autenticacao, dados sensiveis ou integracao externa devem ser testadas primeiro
  • β€’ Prompt eficaz: "Analise a cobertura de testes deste projeto. Identifique as 10 funcoes mais criticas sem testes."

πŸ’» Exemplo no Terminal

# Gerar relatorio de coverage primeiro
$ npm test -- --coverage
# Pedir ao Claude para analisar
> Leia o relatorio de coverage em coverage/lcov-report/index.html e identifique as funcoes mais criticas sem testes. Priorize por risco de negocio.

πŸ’‘ Dica Pratica

Nao busque 100% de cobertura cegamente. Peca ao Claude para focar nos 20% do codigo que representam 80% do risco: funcoes de pagamento, autenticacao, validacao de dados e logica de negocio central.

Uma boa abordagem e dizer: "Dado que temos 40% de coverage, quais funcoes devo testar para ter o maior impacto na confiabilidade do sistema?"

2

✍️ Gerando testes com Claude

Com os gaps identificados, e hora de gerar testes abrangentes. O Claude Code le o codigo-fonte da funcao, entende seu comportamento esperado, identifica edge cases e gera testes completos que seguem as convencoes do seu projeto.

🎯 Conceito Principal

O Claude gera testes que cobrem o caminho feliz, erros esperados e edge cases. Ele analisa a assinatura da funcao, os tipos de entrada/saida, as dependencias e o contexto de negocio para criar testes significativos.

  • β€’ Testes completos: O Claude gera testes para happy path, error cases, boundary values e null/undefined inputs automaticamente
  • β€’ Convencoes do projeto: Se voce ja tem testes existentes, o Claude imita o estilo (describe/it, test(), assert vs expect) e a estrutura de pastas
  • β€’ Mocks inteligentes: O Claude identifica dependencias externas (banco de dados, APIs, filesystem) e gera mocks apropriados
  • β€’ Prompt eficaz: "Escreva testes para a funcao calculateDiscount em src/pricing.ts. Cubra happy path, erros e edge cases. Use o mesmo estilo dos testes existentes."

πŸ’» Exemplo no Terminal

# Geracao abrangente de testes
> Leia src/services/auth.ts e escreva testes unitarios completos. Inclua:
- Login com credenciais validas
- Login com senha errada
- Usuario inexistente
- Token expirado
- Rate limiting
Siga o padrao dos testes em __tests__/

πŸ’‘ Dica Pratica

Sempre peca ao Claude para ler os testes existentes antes de gerar novos. Isso garante consistencia de estilo. Use: "Leia os testes existentes em __tests__/ para entender o padrao, depois gere testes para X."

Para funcoes complexas, peca testes em etapas: primeiro o happy path, depois os erros, depois os edge cases. Isso da resultados mais detalhados do que pedir tudo de uma vez.

3

▢️ Verificando e rodando testes

Testes gerados por IA precisam ser validados e executados. O Claude Code pode rodar os testes, interpretar falhas, corrigir o codigo dos testes e re-executar ate que todos passem. Esse loop de feedback e uma das maiores vantagens do Claude sobre geradores de testes tradicionais.

🎯 Conceito Principal

O workflow de validacao e iterativo: gera β†’ roda β†’ falha β†’ corrige β†’ roda novamente. O Claude entende mensagens de erro, stack traces e diffs para ajustar os testes ate que estejam corretos. Isso e feito em um loop natural de conversa.

  • β€’ Executar testes: Peca ao Claude para rodar npm test ou pytest e analise os resultados automaticamente
  • β€’ Interpretar falhas: O Claude le o output de erro e distingue entre testes mal escritos (corrige o teste) e bugs reais no codigo (reporta o bug)
  • β€’ Fix automatico: Quando o teste falha por setup incorreto (mock errado, import faltando), o Claude corrige e re-executa
  • β€’ Descoberta de bugs: Testes que falham podem revelar bugs reais no codigo de producao - o Claude distingue os dois cenarios

πŸ’» Exemplo no Terminal

# Pedir para rodar e corrigir
> Rode os testes que voce acabou de criar. Se algum falhar, analise o erro e corrija. Repita ate todos passarem.
# Resultado tipico:
Rodando: npm test -- --testPathPattern=auth.test.ts
FAIL: 2 de 8 testes falharam
Corrigindo mock do database...
Rodando novamente...
PASS: 8 de 8 testes passaram

πŸ’‘ Dica Pratica

Instrua o Claude a nao mais do que 3 tentativas de correcao por teste. Se um teste falhar 3 vezes, provavelmente ha um problema de design que precisa de intervencao humana.

Adicione ao CLAUDE.md: "Apos gerar testes, sempre rode-os. Se falharem, corrija e rode novamente. Maximo 3 tentativas por teste."

4

πŸ“ˆ Coverage check (medindo melhoria)

Apos gerar e validar os testes, e hora de medir o impacto real. O Claude pode rodar o coverage report antes e depois, calcular a melhoria e identificar o que ainda falta para atingir a meta de cobertura desejada.

🎯 Conceito Principal

Coverage check e o feedback quantitativo do seu esforco de testes. O Claude compara o antes e depois, mostra a evolucao por arquivo/funcao e sugere proximos passos para continuar melhorando a cobertura de forma estrategica.

  • β€’ Antes vs depois: Rode coverage antes de gerar testes e depois. O Claude calcula o delta e mostra quais areas melhoraram
  • β€’ Metricas importantes: Line coverage, branch coverage e function coverage. Branch coverage e a mais reveladora - mostra se todos os caminhos logicos estao testados
  • β€’ Gaps restantes: O Claude identifica o que ainda falta e estima quantos testes adicionais sao necessarios para atingir a meta
  • β€’ CI integration: Configure um threshold minimo no CI (ex: 80%) e o Claude ajuda a manter essa meta em cada PR

πŸ’» Exemplo no Terminal

# Verificar coverage apos novos testes
> Rode npm test -- --coverage e compare com o coverage anterior. Mostre a evolucao por arquivo e sugira proximos passos para chegar a 80%.
# Resultado tipico:
Coverage antes: 42.3%
Coverage depois: 67.8% (+25.5%)
Faltam: auth.ts (branch 60%), payment.ts (0%), utils.ts (linha 45-67)

πŸ’‘ Dica Pratica

Nao persiga 100% de cobertura - o retorno diminui drasticamente apos 80%. O esforco para ir de 80% a 90% e frequentemente maior do que de 40% a 80%. Foque em coverage de branches para logica critica.

Crie um script no package.json: "test:coverage": "jest --coverage --coverageThreshold='{\"global\":{\"branches\":80}}'" para enforcar o threshold automaticamente.

5

πŸ”΄πŸŸ’ TDD com Claude Code (test-first)

O Claude Code e um parceiro ideal para Test-Driven Development. Voce descreve o comportamento desejado, o Claude escreve o teste primeiro (que falha), depois implementa o codigo para fazer o teste passar. O ciclo Red-Green-Refactor ganha uma velocidade extraordinaria.

🎯 Conceito Principal

No TDD assistido por Claude, o ciclo e: descreva o comportamento β†’ Claude escreve o teste β†’ teste falha (RED) β†’ Claude implementa o codigo β†’ teste passa (GREEN) β†’ Claude refatora (REFACTOR). Voce conduz a especificacao, o Claude executa.

  • β€’ RED - Escreva o teste: Descreva o comportamento em linguagem natural e peca ao Claude para escrever apenas o teste (sem implementacao)
  • β€’ GREEN - Implemente: Peca ao Claude para implementar o minimo de codigo necessario para o teste passar
  • β€’ REFACTOR - Melhore: Com o teste verde como rede de seguranca, peca ao Claude para refatorar o codigo mantendo os testes passando
  • β€’ Iteracao rapida: O Claude faz o ciclo completo em minutos, onde manualmente levaria horas. Voce foca na especificacao, ele na implementacao

πŸ’» Exemplo no Terminal

# Passo 1: RED - Escreva o teste
> Escreva um teste para uma funcao calculateShipping que:
- Retorna frete gratis para pedidos acima de R$200
- Cobra R$15 para pedidos entre R$100 e R$200
- Cobra R$25 para pedidos abaixo de R$100
NAO implemente a funcao, apenas o teste.
# Passo 2: GREEN - Implemente
> Agora implemente a funcao calculateShipping para fazer todos os testes passarem.
# Passo 3: REFACTOR
> Refatore a implementacao para ser mais legivel, mantendo os testes verdes.

πŸ’‘ Dica Pratica

TDD com Claude funciona melhor quando voce descreve comportamentos em vez de implementacoes. Diga "deve retornar frete gratis para pedidos acima de R$200" em vez de "use um if para checar se o valor e maior que 200".

Adicione ao CLAUDE.md: "Quando eu disser 'TDD', escreva primeiro os testes, depois implemente o codigo para passar os testes, e finalmente refatore."

6

🧊 Testes de edge cases

Os bugs mais perigosos vivem nos edge cases: valores limite, entradas inesperadas, condicoes de corrida e estados impossiveis. O Claude Code e excelente em pensar nesses cenarios que humanos frequentemente esquecem, gerando testes que cobrem boundary values e error paths.

🎯 Conceito Principal

Edge cases sao os cenarios que ficam nas bordas do comportamento esperado. O Claude consegue analisar uma funcao e gerar sistematicamente testes para valores nulos, listas vazias, numeros negativos, strings gigantes, caracteres especiais, tipos errados e estados concorrentes.

  • β€’ Boundary values: Valores no limite exato (0, -1, MAX_INT, string vazia, array com 1 elemento) sao onde a maioria dos bugs se esconde
  • β€’ Error paths: O que acontece quando a API retorna 500? Quando o banco esta fora? Quando o disco esta cheio? Testes de resiliencia
  • β€’ Tipos inesperados: Em JavaScript/Python, o que acontece quando recebe undefined, NaN, Infinity ou um objeto onde esperava string?
  • β€’ Concorrencia: Duas chamadas simultaneas a mesma funcao, timeout durante operacao, cancelamento no meio de uma transacao

πŸ’» Exemplo no Terminal

# Pedir testes de edge cases especificamente
> Leia a funcao processPayment em src/payment.ts e gere APENAS testes de edge cases:
- Valor zero, negativo, muito grande (overflow)
- Moeda invalida, moeda nula
- Timeout do gateway de pagamento
- Duplo processamento (idempotencia)
- Cancelamento durante processamento

πŸ’‘ Dica Pratica

Peca ao Claude para pensar como um "adversario" do codigo: "Tente quebrar esta funcao. Quais inputs causariam comportamento inesperado, crash ou dados corrompidos?" Isso gera testes muito mais reveladores do que pedir "escreva testes".

Uma abordagem poderosa: peca ao Claude para listar 20 edge cases possΓ­veis, escolha os 10 mais relevantes, e entao peca para gerar testes so para esses.

πŸ‹οΈ Exercicio Pratico

Aumentar coverage de 40% para 80% em um projeto real

1

Medir coverage inicial

Rode o coverage report e anote o percentual atual:

$ npm test -- --coverage
# ou: pytest --cov=src --cov-report=html

Anote: Lines __%, Branches __%, Functions __%

2

Identificar gaps com Claude

Peca ao Claude para analisar e priorizar:

> Analise o coverage report e identifique as 5 funcoes mais criticas sem testes. Priorize por risco de negocio.
3

Gerar testes para as funcoes priorizadas

Para cada funcao identificada, peca testes completos:

> Escreva testes para [funcao]. Cubra happy path, erros e edge cases. Siga o padrao dos testes existentes.
4

Rodar, corrigir e validar

Peca ao Claude para executar e corrigir ate todos passarem:

> Rode os testes. Corrija os que falharem. Repita ate todos passarem.
5

Medir coverage final e comparar

Rode coverage novamente e compare:

$ npm test -- --coverage
> Compare o coverage atual com o inicial. Quanto melhorou? O que falta para 80%?

Meta: coverage acima de 80% em lines e branches.

βœ… Criterios de Sucesso

☐ Mediu coverage inicial do projeto
☐ Identificou funcoes criticas sem testes
☐ Gerou testes com happy path e edge cases
☐ Todos os testes gerados passam
☐ Coverage subiu significativamente
☐ Experimentou TDD com Claude Code

πŸ“‹ Resumo do Modulo

βœ“
Identifique gaps antes de escrever - Analise coverage existente e priorize por risco de negocio, nao por percentual.
βœ“
Claude gera testes abrangentes - Happy path, erros, edge cases e mocks inteligentes seguindo convencoes do projeto.
βœ“
Loop de validacao automatico - Rode, corrija, rode novamente. O Claude faz o ciclo ate todos os testes passarem.
βœ“
Meca o impacto quantitativamente - Compare coverage antes e depois. Foque em branch coverage para logica critica.
βœ“
TDD assistido por IA e poderoso - Red-Green-Refactor em minutos. Voce especifica, Claude implementa.
βœ“
Edge cases revelam bugs escondidos - Peca ao Claude para "quebrar" o codigo. Boundary values, nulls e concorrencia.

Proximo Modulo:

3.6 - Workflow: Code Review e Pull Request