Mejores Prácticas de Pruebas
Guía de la pirámide de pruebas para servicios y bibliotecas de Go.
Busca en todas las páginas de la documentación
Guía de la pirámide de pruebas para servicios y bibliotecas de Go.
Estas reglas mantienen las pruebas de Go rápidas, legibles y confiables, desde go test local hasta las puertas de fusión de CI.
go test -race ./... y golangci-lint en los mismos paquetes que controlas en CI.t.Run.*_test.go. Mismo módulo, misma refactorización, mismos errores de compilación cuando las APIs se mueven.t.Helper() en ayudantes de aserción compartidos. Los fallos apuntan a la línea de prueba, no a los internos de la utilidad.package foo_test al modelar consumidores. Las pruebas internas permanecen en package foo para ayudantes no exportados.go test ./... en segundos a pocos minutos en portátiles. Divide las suites de integración con etiquetas de compilación o módulos separados cuando sea necesario.time.Sleep para la sincronización. Usa canales, sync.WaitGroup o manejadores httptest controlables.go test -count=1 al depurar fallos. Los pases cacheados ocultan errores de ordenación hasta que la CI se vuelve a ejecutar.b.Loop(). Mide la ruta activa, no la construcción de fixtures.httptest.NewRecorder para pruebas unitarias de manejadores. Reserva NewServer cuando la pila del cliente deba ejecutarse de verdad.resp.Body después de cada llamada al cliente en las pruebas. Las fugas fallan con -count=100 y cargas similares en CI.r.Context() a través de los manejadores en las pruebas. La cancelación y los middleware de plazos solo funcionan cuando los manejadores respetan el contexto.go test por defecto permanezca sin conexión.-race en paquetes que generan goroutines o comparten cachés. Acepta el coste de CPU en los agentes de CI de Linux.testdata/. Trata las diferencias como fixtures de regresión que requieren revisión humana.-fuzztime) por la noche o semanalmente. Reproduce corpora en cada PR sin fuzzing de duración abierta en los pipelines de fusión.Example para copiar y pegar el uso de la API pública. Mantén los comentarios // Output: precisos para que godoc se mantenga verificado.go test falla cuando la documentación se desvía.errors.Is / errors.As en las filas de la tabla de errores. Los errores envueltos rompen las comparaciones ==.require vs assert de testify por equipo. require para precondiciones; assert para comprobaciones independientes.pprof en cargas de trabajo realistas después de que benchstat muestre una ganancia.Suficientes para probar el cableado (DB, autenticación, una ruta HTTP).
La mayoría de los casos permanecen en pruebas unitarias y de manejador rápidas.
Opcional en paquetes centrales.
Nunca sustituyas el porcentaje por aserciones significativas.
Cuando las comparaciones de estructuras grandes y JSONEq mejoran la legibilidad de los fallos.
La biblioteca estándar sigue siendo adecuada para paquetes pequeños.
Extrae la lógica en funciones probables o usa os/exec para ejecutar un binario compilado con argumentos testdata.
Generalmente no; usa benchstat nocturno a menos que el cambio sea explícitamente crítico para el rendimiento.
//go:build integration en pruebas lentas mantiene go test por defecto rápido.
Documenta la etiqueta en README y CI.
Inyecta io.Writer o usa log/slog con un manejador bytes.Buffer.
Evita logs dorados con marcas de tiempo.
Solo cuando las subpruebas no comparten estado mutable del paquete.
El detector de race detecta errores.
Las tablas y los falsos funcionan igual: instancia tipos en filas o usa ayudantes tipados.
Mantenlas en un pipeline separado o en un trabajo nocturno.
Las pruebas unitarias y de manejador siguen siendo la puerta de fusión.
Versiones de Stack: Esta página fue escrita para Go 1.26.x (predeterminado de Green Tea GC, go fix modernizers - verifica el parche en la compilación), chi (última versión - verifica en la compilación), gin (última versión - verifica en la compilación), echo (última versión - verifica en la compilación), google.golang.org/grpc (última versión - verifica en la compilación), sigs.k8s.io/controller-runtime (última versión - verifica en la compilación), kubebuilder (última versión - verifica en la compilación), tinygo (última versión - verifica los objetivos de la placa en la compilación), wazero (última versión - verifica en la compilación) y golangci-lint (última versión - verifica el conjunto de linters en la compilación).
Revisado por Chris St. John·Última actualización: 18 jul 2026