Skill de Testes e Benchmarks em Go
Scaffolding de testes baseados em tabelas e fuzzing para agentes - uma Agent Skill no estilo cookbook para geração de testes em Go 1.26 a partir de critérios de aceitação.
Busque em todas as páginas da documentação
Scaffolding de testes baseados em tabelas e fuzzing para agentes - uma Agent Skill no estilo cookbook para geração de testes em Go 1.26 a partir de critérios de aceitação.
Produz scaffolds de testes: subtestes t.Run baseados em tabelas, casos de httptest, sementes F.Add de fuzzing e stubs de benchmark - com comandos de verificação go test, não reescritas de código de produção.
| Entrada | Por quê |
|---|---|
| Critérios de aceitação | Mapeia para nomes de casos de teste |
| Pacote sob teste | Caminho de importação, API exportada |
| Tipos de erro / sentinelas | Expectativas de errors.Is |
| Handlers HTTP? | Scaffold de httptest.NewRecorder |
| Concorrência no código? | Adicionar -race à verificação |
*_test.go com slice de tabela e subtestesFuzzXxx opcional com sementes de corpusBenchmarkXxx opcional com b.Loop (estilo Go 1.24+) ou loop clássicogo test ./pkg/..., go test -race, go test -fuzz=FuzzParse -fuzztime=30stime.Sleep para sincronização - use canais, synctest ou interfaces.t.Parallel() documentado por caso.-update explícito por política da equipe.Cartão de receita de referência rápida - pronto para copiar e colar.
func TestParseID(t *testing.T) {
tests := []struct {
name string
in string
want string
wantErr bool
}{
{name: "valid", in: "abc-123", want: "abc-123"},
{name: "empty", in: "", wantErr: true},
{name: "spaces", in: " ", wantErr: true},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := ParseID(tt.in)
if tt.wantErr {
if err == nil {
t.Fatal("expected error")
}
return
}
if err != nil {
t.Fatalf("unexpected: %v", err)
}
if got != tt.want {
t.Fatalf("got %q want %q", got, tt.want)
}
})
}
}go test ./internal/parse/... -count=1
go test -race ./internal/parse/... # se o pacote usa goroutinesQuando usar esta skill:
TestEverything giganteAC:
- UUID válido retorna forma normalizada
- UUID inválido retorna ErrInvalid
- Entrada vazia retorna ErrEmptyCada item se torna o nome do t.Run e a linha da tabela.
func TestGetUserHandler(t *testing.T) {
srv := httptest.NewServer(http.HandlerFunc(getUser))
t.Cleanup(srv.Close)
resp, err := http.Get(srv.URL + "/users/1")
if err != nil {
t.Fatal(err)
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
t.Fatalf("status %d", resp.StatusCode)
}
}httptest.NewRecorder para escopo de unidadefunc FuzzParseID(f *testing.F) {
f.Add("abc-123")
f.Add("")
f.Fuzz(func(t *testing.T, in string) {
_, _ = ParseID(in) // não deve entrar em pânico; documentar invariantes
})
}go test -fuzz=FuzzParseID -fuzztime=30s ./internal/parse/func BenchmarkParseID(b *testing.B) {
for b.Loop() {
_, _ = ParseID("abc-123")
}
}go test -bench=BenchmarkParseID -benchmem ./internal/parse/ -count=5testify / cmp: se a equipe usa github.com/stretchr/testify, a skill importa require por ADR.
Caso contrário, as asserções apenas da biblioteca padrão mantêm as dependências mínimas.
Exemplos (ExampleXxx): para snippets verificados por godoc - veja Exemplos como Documentação Executável.
Cobertura: go test -cover ./... para relatório; a skill não busca 100% no scaffold gerado.
Tags de Build: testes de integração atrás de //go:build integration - a skill separa tabelas rápidas de unidade de testes de integração lentos.
/ quebra a regex -run - use nomes seguros.tt := tt antes de t.Parallel().| Abordagem | Quando |
|---|---|
| TDD Manual | Par de programadores experientes |
| Apenas gates de cobertura de código | Perde casos extremos |
| Baseado em propriedades (rápido) | Invariantes complexas |
| Esta skill | Mapeamento rápido de AC para subtestes com agentes |
Não. Estenda com casos de tabela ou novos arquivos. Sinalize duplicação em vez de substituir testes escritos por humanos.
Apenas quando o ADR da equipe ou pacotes irmãos já o utilizam. Padrão testing da biblioteca padrão para scaffolds novos.
Apenas scaffolds de unidade, a menos que as entradas especifiquem ADR de testcontainers. Link para a documentação de TI da equipe em vez disso.
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 (latest - verifique na compilação), gin (latest - verifique na compilação), echo (latest - verifique na compilação), google.golang.org/grpc (latest - verifique na compilação), sigs.k8s.io/controller-runtime (latest - verifique na compilação), kubebuilder (latest - verifique na compilação), tinygo (latest - verifique os alvos de placa na compilação), wazero (latest - verifique na compilação) e golangci-lint (latest - verifique o conjunto de linters na compilação).
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026