✅ pytest basics
pytest e o framework de testes padrao do ecossistema Python. Um arquivo test_*.py, funcoes que comecam com test_, e assert para verificar. Simples assim. Peca ao Claude Code: "escreve testes pytest para este modulo" e ele gera testes para cada funcao.
from calculator import add, divide
def test_add():
assert add(2, 3) == 5
assert add(-1, 1) == 0
def test_divide():
assert divide(10, 2) == 5.0
def test_divide_by_zero():
import pytest
with pytest.raises(ZeroDivisionError):
divide(1, 0)
# Rodar: pytest -v
Em 1 frase: pytest -v = feedback instantaneo sobre o que funciona e o que quebrou.
🔩 Fixtures e conftest
Fixtures preparam o estado que seus testes precisam: um banco temporario, um client HTTP, dados de exemplo. O arquivo conftest.py compartilha fixtures entre todos os arquivos de teste do diretorio. Use @pytest.fixture e o parametro scope para controlar o ciclo de vida.
import pytest
from fastapi.testclient import TestClient
from main import app
@pytest.fixture
def client():
return TestClient(app)
@pytest.fixture
def sample_item():
return {"name": "Widget", "price": 9.99, "tags": ["new"]}
Em 1 frase: fixtures = setup reutilizavel; conftest.py = fixtures compartilhadas.
🎭 Mocks e patches
Mocks simulam dependencias externas. Se sua funcao chama uma API, o teste nao deve depender dessa API estar no ar. Use unittest.mock.patch para substituir a chamada real por um retorno controlado. Claude Code gera mocks precisos quando voce diz o que quer isolar.
Em 1 frase: mock.patch = testar seu codigo sem depender do mundo externo.
📊 Coverage report
Coverage mede quais linhas do seu codigo sao executadas pelos testes. Com pytest-cov, rode pytest --cov=src --cov-report=html e veja exatamente quais caminhos nao estao cobertos. Nao busque 100%, busque cobrir os caminhos criticos.
# Instalar pip install pytest-cov # Rodar com coverage pytest --cov=src --cov-report=term-missing # Gerar relatorio HTML pytest --cov=src --cov-report=html # Abrir htmlcov/index.html no browser
Em 1 frase: coverage mostra o que voce NAO testou; foque nos caminhos criticos.
🔴 TDD com Claude
TDD com IA e superpoder: voce escreve o teste (o "que"), Claude Code gera a implementacao (o "como"). Ciclo: Red (teste falha) -> Green (Claude implementa ate passar) -> Refactor (Claude limpa o codigo). Voce controla a especificacao; a IA faz o trabalho pesado.
Workflow TDD + Claude Code
1. Escreva o teste para o comportamento desejado
2. Rode pytest (vermelho: teste falha)
3. Peca ao Claude: "implemente para passar este teste"
4. Rode pytest (verde: teste passa)
5. Peca ao Claude: "refatore mantendo os testes verdes"
Em 1 frase: TDD + IA = voce define O QUE, Claude faz O COMO.
🔗 CI integration
Testes locais sao bons; testes no CI sao obrigatorios. GitHub Actions roda pytest em cada push/PR automaticamente. Se algum teste falha, o merge e bloqueado. Claude Code gera o workflow YAML completo: "cria um GitHub Actions que roda pytest com coverage".
name: Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- run: pip install -r requirements.txt
- run: pytest --cov=src -v
Em 1 frase: CI = testes rodam automaticamente em cada push; ninguem quebra o que funciona.
🧾 Resumo do Modulo
Proximo modulo:
5.5 — Deploy e Infraestrutura: Docker, cloud e monitoring.