0Pricing
Go Academy · Lección

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 statements

Perfil 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.html

Umbrales 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 nil

testify/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

  1. Escritura de pruebas unitarias con testing
  2. Pruebas basadas en tablas
  3. Dobles de prueba: mocks y stubs
  4. Cobertura de pruebas y testify
← Volver a Go Academy