Skill de Pruebas y Benchmarking de Go
Plantillas de pruebas basadas en tablas y fuzzing para agentes: una Skill de Agente estilo "cookbook" para la generación de pruebas de Go 1.26 a partir de criterios de aceptación.
Busca en todas las páginas de la documentación
Plantillas de pruebas basadas en tablas y fuzzing para agentes: una Skill de Agente estilo "cookbook" para la generación de pruebas de Go 1.26 a partir de criterios de aceptación.
Produce plantillas de pruebas: subpruebas t.Run basadas en tablas, casos de httptest handler, semillas F.Add para fuzzing y stubs de benchmarking, con comandos de verificación go test, no reescrituras de código de producción.
| Entrada | Por qué |
|---|---|
| Criterios de aceptación | Se mapea a los nombres de los casos de prueba |
| Paquete bajo prueba | Ruta de importación, API exportada |
| Tipos/centinelas de error | Expectativas de errors.Is |
| ¿Manejadores HTTP? | Plantilla de httptest.NewRecorder |
| ¿Concurrencia en el código? | Añadir -race a la verificación |
*_test.go con slice de tabla y subpruebasFuzzXxx opcional con semillas del corpusBenchmarkXxx opcional con b.Loop (estilo Go 1.24+) o bucle clásicogo test ./pkg/..., go test -race, go test -fuzz=FuzzParse -fuzztime=30stime.Sleep para sincronización: usar canales, synctest o interfaces.t.Parallel() documentado por caso.-update explícito según la política del equipo.Tarjeta de receta de referencia rápida - lista para copiar y pegar.
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/... # si el paquete usa goroutinesCuándo recurrir a esta skill:
TestEverything.AC:
- UUID válido devuelve forma normalizada
- UUID inválido devuelve ErrInvalid
- Entrada vacía devuelve ErrEmptyCada viñeta se convierte en el nombre de t.Run y una fila de la tabla.
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 el alcance unitario.func FuzzParseID(f *testing.F) {
f.Add("abc-123")
f.Add("")
f.Fuzz(func(t *testing.T, in string) {
_, _ = ParseID(in) // no debe entrar en 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: si el equipo usa github.com/stretchr/testify, la skill importa require por ADR.
De lo contrario, las aserciones solo de la biblioteca estándar mantienen las dependencias mínimas.
Ejemplos (ExampleXxx): para fragmentos verificados por godoc - ver Ejemplos como Documentación Ejecutable.
Cobertura: go test -cover ./... para el informe; la skill no persigue el 100% en la plantilla generada.
Etiquetas de compilación: pruebas de integración detrás de //go:build integration - la skill separa las tablas de unidades rápidas de las IT lentas.
/ rompe la expresión regular -run - usar nombres seguros.tt := tt antes de t.Parallel().| Enfoque | Cuándo |
|---|---|
| TDD Manual | Pareja de programadores con experiencia |
| Solo puertas de cobertura de código | Se pierden casos extremos |
| Basado en propiedades (rápido) | Invariantes complejos |
| Esta skill | Mapeo rápido de AC a subpruebas con agentes |
No. Extender con casos de tabla o nuevos archivos. Marcar duplicación en lugar de reemplazar pruebas escritas por humanos.
Solo cuando el ADR del equipo o los paquetes hermanos ya lo usen. Por defecto, usar la biblioteca estándar testing para las nuevas plantillas.
Solo plantillas de unidad a menos que las entradas especifiquen el ADR de testcontainers. Enlazar a la documentación de IT del equipo en su lugar.
Versiones de Stack: Esta página fue escrita para Go 1.26.x (Green Tea GC por defecto, go fix modernizers - verificar parche en la compilación), chi (última versión - verificar en la compilación), gin (última versión - verificar en la compilación), echo (última versión - verificar en la compilación), google.golang.org/grpc (última versión - verificar en la compilación), sigs.k8s.io/controller-runtime (última versión - verificar en la compilación), kubebuilder (última versión - verificar en la compilación), tinygo (última versión - verificar objetivos de placa en la compilación), wazero (última versión - verificar en la compilación) y golangci-lint (última versión - verificar conjunto de linters en la compilación).
Revisado por Chris St. John·Última actualización: 16 jul 2026