Melhores Práticas de Teste
Orientação da pirâmide de testes para serviços e bibliotecas Go.
Busque em todas as páginas da documentação
Orientação da pirâmide de testes para serviços e bibliotecas Go.
Estas regras mantêm os testes Go rápidos, legíveis e confiáveis, desde o go test local até os portões de merge do CI.
go test -race ./... e golangci-lint nos mesmos pacotes que você bloqueia no CI.t.Run.*_test.go. Mesmo módulo, mesmo refatoramento, mesmos erros de compilação quando as APIs mudam.t.Helper() em helpers de asserção compartilhados. Falhas apontam para a linha de teste, não para os internos da utilidade.package foo_test ao modelar consumidores. Testes internos permanecem em package foo para helpers não exportados.go test ./... em segundos a poucos minutos em laptops. Divida suítes de integração com tags de build ou módulos separados quando necessário.time.Sleep para sincronização. Use canais, sync.WaitGroup ou manipuladores httptest controláveis.go test -count=1 ao depurar falhas. Passes em cache ocultam bugs de ordenação até que o CI seja executado novamente.b.Loop(). Meça o caminho quente, não a construção de fixtures.httptest.NewRecorder para testes de unidade de manipuladores. Reserve NewServer quando a pilha do cliente precisar ser executada de verdade.resp.Body após cada chamada de cliente em testes. Vazamentos falham sob -count=100 e carga semelhante no CI.r.Context() através de manipuladores em testes. Middleware de cancelamento e prazo só funcionam quando os manipuladores respeitam o contexto.go test padrão permaneça offline.-race em pacotes que geram goroutines ou compartilham caches. Aceite o custo da CPU em agentes de CI Linux.testdata/. Trate diffs como fixtures de regressão que exigem revisão humana.-fuzztime) noturnos ou semanais. Reproduza corpora em cada PR sem fuzz de tempo ilimitado em pipelines de merge.Example para uso de API pública copiar e colar. Mantenha os comentários // Output: precisos para que o godoc permaneça verificado.go test falha quando a documentação se desvia.errors.Is / errors.As em linhas de tabela de erro. Erros encapsulados quebram comparações ==.require vs assert do testify por equipe. require para pré-condições; assert para verificações independentes.pprof em cargas de trabalho realistas após benchstat mostrar uma vitória.O suficiente para provar a fiação (DB, autenticação, um caminho HTTP).
A maioria dos casos permanece em testes unitários e de manipulador rápidos.
Opcional em pacotes principais.
Nunca substitua a porcentagem por asserções significativas.
Quando grandes comparações de struct e JSONEq melhoram a legibilidade das falhas.
A biblioteca padrão ainda é boa para pacotes pequenos.
Extraia a lógica em funções testáveis ou use os/exec para executar um binário compilado com argumentos testdata.
Geralmente não - use benchstat noturno, a menos que a alteração seja explicitamente crítica para o desempenho.
//go:build integration em testes lentos mantém o go test padrão rápido.
Documente a tag no README e no CI.
Injete io.Writer ou use log/slog com um manipulador bytes.Buffer.
Evite logs golden com timestamps.
Somente quando os subtestes não compartilham estado de pacote mutável.
O detector de race captura erros.
Tabelas e fakes funcionam da mesma forma - instancie tipos em linhas ou use helpers tipados.
Mantenha-os em um pipeline separado ou trabalho noturno.
Testes unitários e de manipulador permanecem como portão de merge.
Versões de Stack: Esta página foi escrita para Go 1.26.x (padrão Green Tea GC, go fix modernizers - verifique o patch na compilação), chi (mais recente - verifique na compilação), gin (mais recente - verifique na compilação), echo (mais recente - verifique na compilação), google.golang.org/grpc (mais recente - verifique na compilação), sigs.k8s.io/controller-runtime (mais recente - verifique na compilação), kubebuilder (mais recente - verifique na compilação), tinygo (mais recente - verifique os alvos de placa na compilação), wazero (mais recente - verifique na compilação) e golangci-lint (mais recente - verifique o conjunto de linters na compilação).
Revisado por Chris St. John·Última atualização: 18 de jul. de 2026