← Início
#126

Testes Unitários (Framework de Escrita)

Código, Dev & Automação Intermediário Template
Objetivo

Aplicar um framework estruturado para escrever testes unitários eficazes - cobrindo cenários reais, edge cases e comportamentos esperados - para garantir que o código funciona, evitar regressões e permitir refatoração com confiança.

Quando usar
  • Ao implementar testes pela primeira vez no projeto
  • Para padronizar como a equipe escreve testes
  • Quando a cobertura de testes está baixa ou os testes são frágeis
  • Antes de refatorar código crítico
Como usar
  • 1Copie o prompt abaixo no Claude ou ChatGPT
  • 2Cole a função ou módulo que quer testar
  • 3Receba os testes completos com explicações
  • 4Implemente e rode no seu test runner
O Prompt
Você é um engenheiro de software que escreve testes unitários exemplares. Seus princípios: (1) testes documentam o comportamento - o nome do teste deve dizer o que o código faz, (2) Arrange-Act-Assert - estrutura clara em todo teste, (3) cada teste testa UMA coisa - se falhar, você sabe exatamente o que quebrou, (4) testes devem ser rápidos e independentes - sem dependência de ordem ou estado compartilhado, (5) teste comportamento, não implementação - testes não devem quebrar quando refatora. Crie os testes unitários para: **Linguagem:** [ex: TypeScript, Python, Go, Java] **Framework de teste:** [ex: Jest, Vitest, pytest, Go testing, JUnit] **Código para testar:** [cole a função/classe/módulo] **Contexto:** [o que esse código faz no sistema] **Dependências externas:** [banco de dados, APIs, filesystem - o que precisa mockar] **Casos especiais conhecidos:** [edge cases que você sabe que existem] Entregue: **1. Análise do código** - O que faz, inputs, outputs, efeitos colaterais **2. Matriz de cenários** - Tabela com cenário, input, output, tipo **3. Testes completos** - Código organizado por describe/context **4. Testes de erro** - Input nulo, tipos errados, dependência falhando **5. Cobertura alcançada** - Linhas e branches cobertos **6. Dicas de manutenção** - Como manter os testes ao evoluir o código
Exemplo de uso
Input
Linguagem: TypeScript Framework: Jest Código: Função calculateDiscount(price, couponCode, userTier) - Aplica desconto baseado em cupom + tier do usuário - Premium = 10% extra, VIP = 20% extra - Cupom pode ser percentual ou valor fixo - Preço mínimo final é R$1.00
Output
describe('calculateDiscount', () => { describe('sem cupom', () => { it('retorna preço original para usuário regular sem cupom', () => { const result = calculateDiscount(100, null, 'regular'); expect(result).toBe(100); }); it('aplica 10% de desconto para usuário premium', () => { const result = calculateDiscount(100, null, 'premium'); expect(result).toBe(90); }); it('aplica 20% de desconto para usuário VIP', () => { const result = calculateDiscount(100, null, 'vip'); expect(result).toBe(80); }); }); describe('edge cases', () => { it('nunca retorna valor menor que R$1.00', () => { const result = calculateDiscount(5, 'SAVE99', 'vip'); expect(result).toBe(1); }); it('lança erro para preço negativo', () => { expect(() => calculateDiscount(-10, null, 'regular')) .toThrow('Preço deve ser positivo'); }); }); });