Cobertura de pruebas y testify
go test -cover y la biblioteca de aserciones testify
Cobertura de pruebas y testify es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Go Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Go Academy incluye 4 lecciones en total.
go test -cover
Añada -cover a cualquier comando go test para mostrar el porcentaje de cobertura de cada paquete.
go test -cover ./...
// ok myapp 68.4% of statementsPerfil de cobertura
Genere un archivo de perfil de cobertura y visualícelo como HTML para comprobar qué líneas están cubiertas:
go test -coverprofile=c.out ./...
go tool cover -html=c.out -o coverage.htmlUmbrales de cobertura en CI
Exija una cobertura mínima con un comando de una sola línea del shell:
pct=$(go test -cover ./... | awk '/coverage/ {gsub(/%/,""); print $NF}')
[ "${pct%.*}" -ge 80 ] || { echo "Coverage $pct% below 80%"; exit 1; }El 100 % de cobertura no es el objetivo
La cobertura mide qué líneas se ejecutan, no si las aserciones son significativas. Aspire a una cobertura alta en las rutas críticas y acepte una cobertura menor en las ramas de error inalcanzables.
testify/assert
github.com/stretchr/testify/assert proporciona aserciones legibles que informan automáticamente de los valores esperados y reales:
assert.Equal(t, 42, result)
assert.NoError(t, err)
assert.Contains(t, list, "item")
assert.True(t, isValid)testify/require
require es idéntico a assert, pero llama a t.FailNow() cuando se produce un fallo, deteniendo inmediatamente la prueba, igual que t.Fatal.
require.NoError(t, err) // stop if err != nil
// Subsequent code only runs if err is niltestify/suite
testify/suite agrupa pruebas relacionadas en una estructura con configuración y limpieza compartidas, de forma similar a los conjuntos de pruebas de xUnit:
type UserSuite struct { suite.Suite; db *DB }
func (s *UserSuite) SetupTest() { s.db = openTestDB() }
func (s *UserSuite) TestCreate() { /* ... */ }
func TestUserSuite(t *testing.T) { suite.Run(t, new(UserSuite)) }assert.ElementsMatch
Compare slices sin tener en cuenta el orden:
assert.ElementsMatch(t, []int{3,1,2}, []int{1,2,3})assert.JSONEq
Compare cadenas JSON independientemente del orden de las claves:
assert.JSONEq(t, `{"a":1,"b":2}`, `{"b":2,"a":1}`)Aserciones personalizadas
Envuelva testify en sus propios ayudantes de aserciones para añadir contexto del dominio a los mensajes de error:
func assertUserValid(t testing.TB, u *User) {
t.Helper()
assert.NotEmpty(t, u.Name)
assert.Positive(t, u.ID)
}Combinar cobertura con testify
testify no afecta a los informes de cobertura; la cobertura solo tiene en cuenta que se ejecuten las líneas, independientemente de la biblioteca de aserciones utilizada.
Comprobación rápida
¿Cuál es la diferencia entre testify/assert y testify/require?
Resumen: cobertura y testify
Puntos clave:
- go test -cover; -coverprofile para el informe HTML
- assert: continuar tras un fallo; require: detenerse tras un fallo
- testify/suite para pruebas agrupadas con configuración compartida
- Una cobertura alta es positiva; las aserciones con sentido son mejores
Preguntas frecuentes
¿La lección «Cobertura de pruebas y testify» es gratis?
Sí — el texto completo de «Cobertura de pruebas y testify» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Go Academy, actualiza a CoddyKit PRO. El curso de Go Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Cobertura de pruebas y testify»?
go test -cover y la biblioteca de aserciones testify Practicas Go Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Go Academy?
No se requiere experiencia previa. Go Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Cobertura de pruebas y testify»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Go Academy?
Sí. Cada lección de Go Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Escritura de pruebas unitarias con testing
- Pruebas basadas en tablas
- Dobles de prueba: mocks y stubs
- Cobertura de pruebas y testify