0Pricing
Go Academy · Lección

Pruebas basadas en tablas

Pruebas parametrizadas con subpruebas

Pruebas basadas en tablas es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 2 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.

¿Qué son las pruebas basadas en tablas?

Las pruebas basadas en tablas definen un slice de casos de prueba (entradas y salidas esperadas) y recorren esos casos con un único cuerpo de prueba. Reducen la duplicación y hacen trivial añadir nuevos casos.

Patrón básico

Defina una estructura para cada caso, recórralos con t.Run e informe de los fallos usando el nombre del caso:

tests := []struct {
    name  string
    input int
    want  int
}{
    {"zero", 0, 0},
    {"positive", 3, 9},
    {"negative", -2, 4},
}
for _, tt := range tests {
    t.Run(tt.name, func(t *testing.T) {
        got := Square(tt.input)
        if got != tt.want {
            t.Errorf("Square(%d) = %d; want %d", tt.input, got, tt.want)
        }
    })
}

Slice de estructuras anónimas

Use una estructura anónima para el tipo de caso de prueba: mantiene la definición del caso cerca de la prueba y evita asignar un nombre a un tipo que se usará una sola vez.

Incluir casos de error

Añada un campo wantErr bool para comprobar que las funciones devuelven errores en los escenarios esperados:

{"invalid input", -1, 0, true},
// in the loop:
if (err != nil) != tt.wantErr {
    t.Errorf("wantErr %v, got err %v", tt.wantErr, err)
}

Nombres de las subpruebas

Un campo de nombre descriptivo hace que los fallos sean autoexplicativos. Puede ejecutar un caso específico con -run TestFunc/case_name.

Subpruebas paralelas con t.Run

Marque cada subprueba como paralela y capture la variable del bucle para ejecutar los casos simultáneamente, algo importante cuando las pruebas están limitadas por operaciones de E/S.

for _, tt := range tests {
    tt := tt // capture
    t.Run(tt.name, func(t *testing.T) {
        t.Parallel()
        // ...
    })
}

Configuración compartida por caso

Use campos de función tt.setup para permitir una configuración específica para cada caso sin duplicar código repetitivo:

type tc struct {
    setup func() *DB
    input string
    want  int
}

Mantener la legibilidad de los casos

Si los casos aumentan demasiado, defínalos como variables con nombre o cárguelos desde archivos de testdata. Mantenga la tabla compacta: cuando sea posible, use una línea por caso.

Probar varias salidas

Pruebe funciones basadas en tablas que devuelven varios valores añadiendo un campo por cada salida:

type tc struct {
    input     string
    wantVal   int
    wantErr   bool
}

Testify assert en tablas

Use github.com/stretchr/testify/assert dentro de las pruebas basadas en tablas para obtener aserciones legibles sin bloques if/t.Errorf demasiado extensos.

assert.Equal(t, tt.want, got, tt.name)

Documentación mediante casos

La tabla de casos actúa como documentación viva. Los futuros desarrolladores pueden leerla para comprender de un vistazo todas las entradas compatibles y los casos límite.

Comprobación rápida

¿Por qué se captura la variable del bucle (tt := tt) antes de t.Parallel en las pruebas basadas en tablas?

Resumen: pruebas basadas en tablas

Puntos clave:

  • Slice de estructuras que cubre entradas, salidas esperadas y un indicador de error
  • Recorrido con t.Run para crear subpruebas independientes con nombre
  • Captura de la variable del bucle (tt := tt) antes de t.Parallel
  • Los casos actúan como documentación viva de los comportamientos compatibles

Preguntas frecuentes

¿La lección «Pruebas basadas en tablas» es gratis?

Sí — el texto completo de «Pruebas basadas en tablas» 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 «Pruebas basadas en tablas»?

Pruebas parametrizadas con subpruebas 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 2 de 4.

¿Cuánto tiempo toma la lección «Pruebas basadas en tablas»?

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