Saltar a contenido

9. Testing en go

El paquete testing es el estándar en Go para escribir pruebas.
Otros framework de testing: Testify

Ejemplo:

fichero main.go

package main

func Suma(a, b int) int {
    return a + b
}

fichero de prueba: main_test.go

package main

import "testing"

func TestSuma(t *testing.T) {
    resultado := Suma(2, 3)
    esperado := 5

    if resultado != esperado {
        t.Errorf("Suma(2, 3) = %d; esperado %d", resultado, esperado)
    }
}

Para ejecutar las pruebas, se utiliza el comando go test en la terminal.

9.1 Caracteristicas de Testing

  1. Ejecución de pruebas unitarias: Las funciones deben comenzar con Test y recibir un puntero a ***testing.T**.
  2. Mensajes de error: Se usa t.Errorf o t.Fatalf para reportar errores en las pruebas.
  3. Cobertura de código: Puedes generar un reporte de cobertura con:
go test -cover

9.2 Testify

9.2.1 Paquete Assert

El paquete assert simplifica la escritura de pruebas:

  • Imprisión amigable , facil de leer
  • Manejo de errores
  • Puede anotar cada aserción con un mensaje

package yours

import (
  "testing"
  "github.com/stretchr/testify/assert"
)

func TestSomething(t *testing.T) {

  // assert equality
  assert.Equal(t, 123, 123, "they should be equal")

  // assert inequality
  assert.NotEqual(t, 123, 456, "they should not be equal")

  // assert for nil (good for errors)
  assert.Nil(t, object)

  // assert for not nil (good when you expect something)
  if assert.NotNil(t, object) {

    // now we know that object isn't nil, we are safe to make
    // further assertions without causing any errors
    assert.Equal(t, "Something", object.Value)

  }

}
* Cada función assert usa como primer parámetro el puntero al objeto ***testing.T** * Cada función de aserción devuelve un valor booleano que indica si la aserción fue exitosa o no. Esto es útil si deseas continuar realizando más aserciones bajo ciertas condiciones.