Módulo gratuito 2h

F05 — Provar que funciona: testes automáticos, Git e regra dos segredos

Escreva testes no padrão preparar-agir-conferir, quebre o código de propósito para ver o teste gritar e use Git com .gitignore antes do primeiro commit.

Lessons and interactive exercises are delivered in Brazilian Portuguese (pt-BR). Switch to Portuguese version.

Em uma frase: Teste é o degustador padrão que prova todos os pratos em segundos; Git é o caderno de receitas que guarda cada versão — sem senhas dentro.
Pergunta guia: Como sei, sem testar à mão, que o sistema continua certo após cada mudança, e como guardo o histórico sem vazar segredos?

Áudio e quiz da lição F05 · NotebookLM

Material multimídia da lição

Como bugs em produção ensinam arquitetura

Conversa guiada sobre por que testes automatizados, commits pequenos e proteção de segredos evitam regressões em produção.

Áudio M4A

Prática extra no NotebookLM (aberta sem login)

Links públicos com testes, flashcards, mapa mental e relatórios para revisar fora da aula.

Passo 1 · Antes de ler: preveja

Tente responder antes de abrir o gabarito

Errar uma previsão mostra exatamente onde está a lacuna. Chute mentalmente ou no papel antes de revelar a resposta do professor.

1. Ao rodar 'manage.py test', o Django usa o seu banco de dados de verdade com os produtos que você cadastrou?

2. Você enviou um arquivo .env com senhas para o Git sem querer e depois apagou o arquivo no commit seguinte. O problema acabou?

1. Anatomia de um teste: Arrange, Act, Assert

Todo teste automatizado claro tem três blocos: preparar a cena (Arrange), executar a ação (Act) e conferir o resultado (Assert).

catalogo/tests.py — Testando estoque insuficiente (409)

def test_comprar_acima_do_estoque_retorna_409(self):
    # 1. Arrange (preparar)
    p = Produto.objects.create(nome="Bolsa", preco=Decimal("100.00"), estoque=1)
    client = APIClient()

    # 2. Act (agir)
    resp = client.post(f"/api/produtos/{p.id}/comprar/", {"quantidade": 2}, format="json")

    # 3. Assert (conferir)
    self.assertEqual(resp.status_code, 409)
    p.refresh_from_db()
    self.assertEqual(p.estoque, 1)

2. .gitignore antes do primeiro commit

Antes de rodar git add ., crie o arquivo .gitignore para impedir que .venv/, db.sqlite3, __pycache__/ e arquivos .env entrem no repositório.

Quebre de propósito

Quebrar o código de propósito para provar que o teste pega

Experimento: Na view de comprar, altere temporariamente o status de retorno de estoque insuficiente de 409 para 200 e rode .venv\Scripts\python manage.py test.

O que falha: O terminal falha imediatamente com AssertionError: 200 != 409, apontando a linha exata do teste que detectou a regressão.

Por que a regra existe: Um teste que nunca falhou pode estar testando a coisa errada. Ver o teste falhar quando a regra quebra prova que sua rede de segurança funciona.

Armadilhas comuns (errado × certo)

ErradoCertoPor quê
Rodar 'git add .' sem criar .gitignore antesCriar .gitignore primeiro e conferir com 'git status'Evita subir milhares de arquivos da .venv ou vazar .env com senhas.
Testar tudo na mão só na tela alteradaRodar a suíte completa com manage.py testAlterar um arquivo pode causar regressão em outra rota sem você perceber.
Mão na massa

Exercício com pista e gabarito

Escreva no papel os 3 passos (Arrange, Act, Assert) para testar que um produto com preço negativo é rejeitado com 400.

Ver pista

Prepare o APIClient, envie POST com preco '-10.00', confira status_code == 400.

Ver gabarito

Arrange: client = APIClient(). Act: resp = client.post('/api/produtos/', {'nome': 'Teste', 'preco': '-10.00'}, format='json'). Assert: self.assertEqual(resp.status_code, 400).

Quiz da lição

Quiz com explicação de cada erro

Se um arquivo .env com senha de banco foi commitado e enviado para o GitHub, o que você deve fazer?
Revisão espaçada · 1, 3 e 7 dias

Fichas de revisão (clique para virar)

Se você só lembrar de 3 coisas desta lição:
  • Testes automáticos rodam em banco temporário e protegem contra regressão em segundos.
  • Quebre o código de propósito para ter certeza de que o teste realmente protege a regra.
  • Crie o .gitignore antes do primeiro commit e nunca coloque segredos no Git.
Apoio rápido · 44 termos

Glossário de Fundamentos (A–Z)