Pular para o conteúdo
Tecnologia

Unit tests ruins são pior que nenhum teste. Aprenda princípios que criam testes valiosos, rápidos e maintainables.

Conceitos Principais

AAA Pattern

Arrange: setup. Act: executa código. Assert: verifica resultado. Estrutura clara, legível.

FIRST Principles

Fast: < 100ms. Independent: não dependem de ordem. Repeatable: mesmo resultado sempre. Self-Validating: pass/fail claro. Timely: escrito junto com código.

One Assert

Teste uma coisa. Falha clara. Exceção: assert múltiplos atributos de um objeto.

Mocking Strategy

Mock apenas boundaries (DB, HTTP). Não mock lógica de negócio. Test doubles: mock, stub, spy, fake.

Passo a Passo

  1. Estruture com AAA: // Arrange
    const user = { name: "John" };
    // Act
    const result = formatUser(user);
    // Assert
    expect(result).toBe("John");
  2. Descreva Comportamento: Não: test("getUserById"). Sim: test("getUserById returns user when exists"). Descrição clara do comportamento.
  3. Mock Boundaries: Mock fetch, DB queries. Não mock funções puras. Stub retornos. Spy chamadas.
  4. Teste Edge Cases: Null, undefined, empty, max values. Error cases. Boundary conditions. Não apenas happy path.
  5. Coverage Inteligente: 100% coverage ≠ testes bons. Foque em lógica crítica. Ignore getters/setters simples. Quality > quantity.

Boas Praticas

Recomendacoes

• AAA pattern sempre

• Descrições claras de comportamento

• Testes independentes (não compartilham state)

• Mock apenas I/O externo

• Rápidos (< 100ms cada)

• Um conceito por teste

• Teste comportamento, não implementação

• Evite lógica em testes

• Setup com beforeEach quando comum

• Cleanup com afterEach

• Edge cases e errors

• Determinísticos (sem random)

• Legíveis como documentação

• CI roda todos os testes

• Coverage > 80% de código crítico

Erros Comuns

Evite estes erros

• Testar métodos privados

• Múltiplos conceitos em um teste

• Testes dependentes de ordem

• Mock de tudo

• Assertions vagos (toBeTruthy)

• Não testar edge cases

Checklist

  • AAA pattern aplicado
  • Descrições comportamentais
  • Mocks apenas em boundaries
  • Edge cases testados
  • Testes < 100ms
  • Coverage > 80%
  • CI executando testes