ROTA · 6 CLASSES · 1 GRUPOS
Testes que Valem Salário
Proteja comportamento com subtestes, interfaces, golden files e HTTP em memória.
Pré-requisitos orientam, mas nunca bloqueiam. Cinco classes da árvore são grátis com conta.O ARCO DA ROTA
ORDEM RECOMENDADA
6 classes, do primeiro passo ao fechamento.
Cada classe leva cerca de 15–25 minutos no novo formato de slides. Você pode sair da ordem quando outro nó fizer mais sentido.
- 01Testes que Valem SalárioTable-driven tests: casos que contam a história
Escreva tabelas de casos que aprovam a implementação correta e capturam uma mutação determinística.
- 02Testes que Valem SalárioSubtests e t.Run: falhas com endereço
Dê nome e isolamento a cada caso com subtestes, aprovando a implementação correta e capturando a quebrada.
- 03Testes que Valem SalárioMocks por interface: fakes e spies no tamanho certo
Controle dependências com interfaces estreitas: fakes para testar estado e spies para verificar interações, sem acoplar o teste à implementação.
- 04Testes que Valem SalárioGolden files: saídas grandes sob revisão
Compare saídas grandes e estáveis contra goldens determinísticos: bytes exatos, normalização de JSON, diagnóstico útil e -update como mudança revisada.
- 05Testes que Valem Saláriohttptest na prática: contratos HTTP sem abrir porta
Construa requisições e respostas em memória com net/http/httptest, afirme status, header e corpo sem abrir porta, e detecte mutações reais em handlers GET e POST.
- 06Testes que Valem SalárioCapstone: uma suíte de checkout ponta a ponta
Reúna table-driven, subtests, fake/spy, golden e httptest em uma suíte de checkout que aprova a versão correta e detecta mutações em duas camadas.
PRÉVIA DA PRIMEIRA CLASSE
Table-driven tests: casos que contam a história
Você escreveu uma função que calcula frete. Testou com um total qualquer, viu o número sair, seguiu para a próxima tarefa. Duas semanas depois alguém muda a comparação de >= para > e o cliente no limite passa a pagar frete indevido. O teste que existia não percebeu nada, porque ele exercitava um total longe da fronteira. O problema não foi a mudança — mudanças vão acontecer. O problema foi o teste não contar a história da regra.
Table-driven tests existem para fazer essa história ficar visível. Em vez de espalhar if got != want em cinco funções quase iguais, você reúne entradas, resultados esperados e o motivo de cada caso em um único slice de structs. O laço percorre a tabela e executa a mesma asserção para cada linha. O que sobra para revisar é a lista de casos: ela precisa responder, sozinha, quais comportamentos o contrato protege.
O risco de uma tabela fraca é o mesmo de uma função sem teste: ela executa, fica verde e dá uma falsa sensação de segurança. Uma tabela só vale quando escolhe entradas capazes de distinguir o contrato correto de uma mutação plausível. Se você só copia variações do mesmo caminho feliz, qualquer defeito pequeno passa batido. Por isso o critério de uma boa linha não é quantidade, é poder de discriminação: qual mudança essa entrada detectaria?
Este mini aplica uma inversão que muda o jogo. Em vez de implementar a função de produção, você implementa o teste. O avaliador recebe sua suíte e a executa contra duas implementações do mesmo contrato: uma conhecida como correta (good) e outra com um defeito deliberado (broken). A aprovação exige duas evidências — nenhuma acusação falsa contra good e ao menos uma acusação verdadeira contra broken. Um teste vazio passa no primeiro critério e falha no segundo; um teste que sempre falha faz o oposto. Sobrará apenas a suíte que realmente discrimina.
A assinatura usa TestingT, uma interface mínima com Helper, Errorf e Run. O corpo continua parecendo um teste Go de verdade: nome começando em Test, tabela de casos, subtestes e mensagens com got e want. A interface existe apenas porque o avaliador concatena seu teste com o harness e roda go run, em vez de orquestrar um subprocesso de go test. Em um repositório normal, você troca TestingT por *testing.T e arquiva a função em um _test.go.
A bancada abaixo resume o mecanismo em quatro passos. O primeiro frame estabelece a tabela. O segundo mostra a implementação boa aprovando cada comparação. O terceiro injeta a mutação e mostra a mesma tabela acusando o caso decisivo. O quarto reúne as duas evidências: passa-na-boa e falha-na-quebrada. Cores não decoram; elas informam o resultado de cada comparação.
Entre para continuar nos slides, rodar o código e enfrentar os desafios.
Começar pela rota →ESTA ROTA E TODAS AS OUTRAS
Qualquer plano abre os 188 nós.
Mensal R$19,90 · anual R$149 · lifetime R$499. Todos têm garantia de 7 dias.