🔥 PRUEBAS, TABLAS DE PRUEBAS

¿Qué son las tablas de pruebas?

Las tablas de pruebas en Go representan una técnica eficiente para validar múltiples escenarios de entrada y salida sobre una misma función. Este enfoque resulta especialmente útil cuando se busca optimizar el proceso de testing y mantener el código limpio y organizado. Al emplear este método, es posible definir un conjunto de casos de prueba en una estructura, lo que facilita la automatización y el mantenimiento de los tests. Aplicar mejores prácticas para pruebas en Go permite detectar errores de manera temprana y asegurar la calidad del software.

Ejemplo del uso de tablas de pruebas en Go

package persona

func EsAdulto(edad int) bool {
    return edad >= 18
}
package persona

import "testing"

type EsAdultoTest struct {
    edad int
    want bool
}

var esAdultoTests = []EsAdultoTest{
    {edad: 17, want: false},
    {edad: 18, want: true},
    {edad: 19, want: true},
}

func TestEsAdulto(t *testing.T) {
    for _, test := range esAdultoTests {
        got := EsAdulto(test.edad)
        if got != test.want {
            t.Errorf("EsAdulto(%v) = %v, se esperaba %v", test.edad, got, test.want)
        }
    }
}

En este ejemplo, se define una estructura que almacena los datos de cada caso de prueba, permitiendo así cómo estructurar pruebas con tablas en Go de forma clara y reutilizable.

type EsAdultoTest struct {
    edad int
    want bool
}

A continuación, se crea un arreglo con los diferentes valores de entrada y los resultados esperados, lo que facilita la gestión de múltiples escenarios de prueba.

var esAdultoTests = []EsAdultoTest{
    {edad: 17, want: false},
    {edad: 18, want: true},
    {edad: 19, want: true},
}

El ciclo recorre cada elemento de la tabla de pruebas y ejecuta la función bajo prueba, comparando el resultado obtenido con el esperado. Este patrón es ampliamente utilizado en ejemplos de tablas de pruebas en Golang por su claridad y escalabilidad.

for _, test := range esAdultoTests {
    got := EsAdulto(test.edad)
    if got != test.want {
        t.Errorf("EsAdulto(%v) = %v, se esperaba %v", test.edad, got, test.want)
    }
}

La salida del test será similar a la siguiente:

PASS
ok      github.com/arumals/como-aprendi-go/073_tabla_de_pruebas 0.005s

Ventajas de usar tablas de pruebas en Go

  • Permiten definir múltiples casos de prueba de manera estructurada y legible.
  • Facilitan la automatización y el mantenimiento de los tests, ya que los casos se agrupan en una sola estructura.
  • Mejoran la escalabilidad de las pruebas, permitiendo agregar o modificar escenarios fácilmente.
  • Ayudan a detectar errores en diferentes condiciones de entrada y salida de forma eficiente.
  • Fomentan la reutilización de código y la claridad en la lógica de validación.

Mejores prácticas para pruebas en Go con tablas de pruebas

  • Define nombres descriptivos para cada caso de prueba, usando campos como name en la estructura.
  • Incluye todos los escenarios relevantes, tanto casos típicos como casos límite y de error.
  • Mantén las estructuras de prueba simples y fáciles de leer, evitando la complejidad innecesaria.
  • Utiliza subtests (t.Run) para identificar fácilmente qué caso falla y mejorar la legibilidad de los reportes.
  • Separa claramente los datos de entrada, los resultados esperados y la lógica de validación.
  • Reutiliza las tablas de pruebas en diferentes funciones o paquetes cuando sea posible.
  • Documenta brevemente el propósito de cada tabla de pruebas y sus campos.
  • Actualiza y amplía las tablas de pruebas conforme evoluciona la lógica de negocio o los requisitos.

Conclusión

El uso de tablas de pruebas en Go es una estrategia fundamental para mejorar la calidad y la mantenibilidad del código. Esta técnica permite definir múltiples casos de prueba de manera estructurada, facilitando la automatización y la detección de errores en etapas tempranas del desarrollo. Además, aplicar ventajas de usar tablas de pruebas en Go ayuda a mantener los tests organizados y escalables, lo que resulta esencial en proyectos de cualquier tamaño. Adoptar este enfoque no solo optimiza el tiempo dedicado a la validación, sino que también promueve la escritura de código más robusto y confiable. En definitiva, incorporar cómo testear aplicaciones en Go usando test tables y seguir las mejores prácticas para pruebas en Go son pasos clave para cualquier desarrollador que busque eficiencia y calidad en sus proyectos.


Cuestionario de repaso

  1. ¿Qué son las tablas de pruebas en Go y para qué se utilizan principalmente?
  2. Explica cómo se estructura y utiliza una tabla de pruebas en un test de Go.
  3. Menciona al menos tres ventajas de emplear tablas de pruebas en Go.
  4. Enumera y describe dos mejores prácticas recomendadas al implementar tablas de pruebas en Go.
  5. ¿Por qué es importante actualizar y ampliar las tablas de pruebas conforme evoluciona la lógica de negocio?
  6. ¿Cómo ayuda el uso de subtests (t.Run) en la gestión de tablas de pruebas?
  7. ¿Qué aspectos debes documentar al crear una tabla de pruebas para que sea fácil de mantener y reutilizar?

Otros Artículos