Go testing

Go incluye un programa llamado go test que te será de gran utilidad para poner a prueba funciones de tu código. Esto es realmente útil para asegurarte de que todo funciona como debería hacerlo después de añadir características o de realizar cambios importantes en tu desarrollo. Para poder fabricar un ejemplo con el uso de go test, supongamos que has escrito un archivo llamado math.go, y que dicho archivo contiene una función que sirve para calcular el promedio de un conjunto de números:

package math

func Average(numbers []float64) float64 {
  total := float64(0)
  for _, x := range numbers {
  total += x
}
return total float64(len(numbers))

Para preparar pruebas para esta función, sólo tienes que escribir un archivo con el mismo nombre que el archivo que contiene la función a probar, pero en lugar de finalizar en .go lo hará en _test.go. El compilador de Go ignora los archivos que finalizan de este modo cuando usas go install o go build. Como queremos fabricar pruebas para la función Average, en nuestro nuevo archivo vamos a crear una función llamada TestAverage. La función probadora debe empezar con la palabra Test para que go test la ejecute. Te muestro el código que habría en math_test.go y te sigo explicando…

package math

import "testing"

func TestAverage(t *testing.T) {
  result := Average([]float64{2,4})
  if result != 3 {
    t.Error("Expected 3, got ", result)
  }
}

Después de definir el paquete, que es el mismo que el del archivo que contiene la función que estamos probando, has de importa el paquete testing, porque las funciones probadoras usan el tipo *testing.T como parámetro. Dentro de la función probadora, TestAverage, tienes que usar la función que va a ser probada, que en este caso es la función Average. La idea es sencilla, se trata de que le pases a la función Average unos parámetros que generen unos valores de salida que conozcas de antemano, y así podrás comparar los valores devueltos por la función que estás probando con los que tú ya sabes que debería devolver. En el ejemplo se pasan los valores 2 y 4, cuyo resultado previsto, su promedio, es 3. En el caso de que la función Average no devolviera 3 se usa t.Error, que es similar a fmt.Println, con la finalidad de indicarle al programa go test que se ha detectado un error.

Todo listo, ahora sólo te resta ejecutar go test, el cual te debería mostrar un resultado similar al que sigue.

$ go test
PASS
ok    goWorkspace/src/Repository/Project/math    0.029s