Introducción a los Testing Unitarios en Go

1. ¿Qué es un Test Unitario?

Un test unitario es una función que prueba una pequeña parte del código, generalmente una función individual, para asegurarse de que funciona correctamente. En Go, los tests unitarios se colocan en archivos que terminan en _test.go.

2. Estructura Básica de un Test

Go utiliza el paquete testing para realizar tests unitarios. A continuación, te muestro un ejemplo básico de cómo se escribe un test unitario:

package main

import (
    "testing"
)

// Función a testear
func Suma(a, b int) int {
    return a + b
}

// Test unitario para la función Suma
func TestSuma(t *testing.T) {
    resultado := Suma(2, 3)
    esperado := 5

    if resultado != esperado {
        t.Errorf("Resultado incorrecto: obtuve %v, esperaba %v", resultado, esperado)
    }
}

3. Ejecutar Tests

Para ejecutar los tests, puedes usar el comando go test en la línea de comandos. Go ejecutará todos los archivos que terminan en _test.go y mostrará los resultados.

go test

4. Subtests y Table-Driven Tests

Go permite organizar los tests en subtests y usar un enfoque basado en tablas para probar múltiples casos con menos código repetitivo.

Subtests

func TestSuma(t *testing.T) {
    casos := []struct {
        nombre     string
        a, b, esperado int
    }{
        {"Suma positiva", 2, 3, 5},
        {"Suma negativa", -1, -2, -3},
    }

    for _, caso := range casos {
        t.Run(caso.nombre, func(t *testing.T) {
            resultado := Suma(caso.a, caso.b)
            if resultado != caso.esperado {
                t.Errorf("Para %s: obtuve %v, esperaba %v", caso.nombre, resultado, caso.esperado)
            }
        })
    }
}

5. Cobertura de Código

Puedes ver la cobertura de tu código con los tests utilizando el siguiente comando:

go test -cover

Esto mostrará un porcentaje de cuánto de tu código está siendo cubierto por los tests.

Conclusión

Los tests unitarios son una parte esencial del desarrollo en Go. Te permiten asegurarte de que cada parte de tu código funciona como esperas y te facilitan mantener la calidad a medida que tu proyecto crece.