¿Qué son las pruebas y como implementarlas en GO?
¿Alguna vez usó una aplicación o algún código de GitHub, recibió errores y no tenía idea de por qué? Tal vez tuvo que comunicarse con el proveedor o el mantenedor del repositorio de GitHub para pedir ayuda. Este tipo de situaciones se pueden mitigar con las pruebas adecuadas.
Cuando se trata de la calidad del código, una de las primeras cosas en las que debe pensar es en probar el código. Probar el código desde el principio es la diferencia entre enviar un producto que está plagado de errores y uno que está listo para el consumidor.
Te explicaré los primeros pasos para comenzar a realizar pruebas en Go utilizando el paquete de pruebas integrado.
El paquete Go Testing
Cuando estás probando código en otros lenguajes además de Go, una de las primeras preguntas que te viene a la mente es: ¿Qué biblioteca o marco voy a usar? Afortunadamente, con Go, hay un paquete de prueba integrado. Eso significa que el paquete de prueba es parte de la biblioteca estándar y no es necesario utilizar un marco externo.
El paquete proporciona soporte para pruebas ad-hoc y automatizadas de paquetes Go. Una vez que escriba la prueba, puede ejecutarla usando el comando go test.
El comando go test buscará todos los archivos Go en el directorio actual donde está ejecutando el formulario de comando. go test buscará dos palabras clave:
• Cualquier archivo Go que termine en _test.go
• Todos los nombres de funciones que comienzan con Test
Aunque no es obligatorio, el nombre de la función debe comenzar con una T mayúscula. De lo contrario, usuarios como Golint arrojarán errores a la consola.
Algunas formas populares de utilizar el paquete de pruebas Go incluyen:
• Ejecución de pruebas directamente desde la línea de comandos de forma ad-hoc.
• Ejecución de pruebas automatizadas
• Ejecución de pruebas en canalizaciones. Por ejemplo, puede usar un flujo de trabajo de acciones de GitHub para iniciar una prueba de Go. Eso significa que la prueba se ejecutará incluso antes de que el código intente compilarse, para que sepa si ocurren problemas desde el principio.
Pruebas comparativas
Una característica interesante incluida en el paquete de pruebas de Go es para las pruebas comparativas, es decir, para ver la velocidad del código. Si un código rápido y una implementación rápida son importantes para usted, es posible que se encuentre probando soluciones en diferentes idiomas. Un ejemplo es probar una función en Python frente a Go y ver cuál es más rápida.
Con la función de referencia, puede registrar fácilmente el código.
Ejemplo de prueba
Hay muchos tipos de pruebas. Algunos de los más populares incluyen:
Pruebas Unitarias
Pruebas de integración
Y hay muchos otros.
De hecho, los diferentes tipos de pruebas pueden llenar un libro completo (y hay libros para probarlo).
El tipo clave de prueba en el que nos enfocaremos es la prueba unitaria, que es una prueba que garantiza que cada parte de su código entregue el resultado deseado, es decir, lo que está esperando.
A continuación, se muestra un ejemplo de una prueba de Go.
package main
import (
"testing""github.com/stretchr/testify/assert"
)
funcTestAddition(t *testing.T) {
x := 2y := 2assert.Equal(t, x, y, "x and y should be the same")
}
Vamos a analizarlo sección por sección.
La primera sección es para crear un paquete principal.
packagemain
A continuación, especificamos qué paquetes deseamos importar. El primero es el paquete de prueba estándar y el segundo es un paquete de validación (assert package). Qué proporciona una lista de herramientas de prueba, por ejemplo, para ver si dos valores son iguales en una prueba unitaria.
import ("testing""github.com/stretchr/testify/assert"
)
Finalmente, tienes la función. La función se compone de algunos aspectos clave que son imprescindibles para las pruebas:
Primero, el nombre de la función comienza con Test, lo que le dice a Go que esta función no es solo una función estándar, sino una función de prueba.
El argumento t es de tipo *testing.T. *testing es llamar al valor de tipo de prueba (type testing) y tipo .T (type .T) es para administrar el estado de prueba y los registros de prueba formateados.
La función en sí devuelve una prueba simple. Prueba si la variable x y y son ambas de un entero de 2. Para probar que las dos variables son iguales, use el paquete de validación assert.
El paquete de aserción contiene:
El argumento t para hacer saber a validación (assert) que está probando contra la función
Las dos variables, x y y, que se pasan porque esas son las variables que está probando
La condición “x y por qué debería ser el mismo”, que le dice a la función Equal () cuál debería ser el resultado deseado
funcTestAddition(t *testing.T) {
x := 2
y := 2
assert.Equal(t, x, y, "x and y should be the same")
}
Guardamos el código en un archivo Go. Recuerde, el archivo Go debe terminar con _test.go.De manera sencilla, guarde el archivo Go como main_test.go o como lo prefiere.
Para ejecutar la prueba, ejecute el siguiente comando:
go test main_test.go o go test #nombreArchivo.go
Importante a tener en cuenta:
El código de calidad es importante en todos los escenarios, ya sea que el código se envíe a un cliente o que el código permanezca interno para que lo usen sus compañeros de equipo. El código que escribe puede funcionar en ese momento exacto, pero una vez que se compromete con el control de código fuente, no tiene idea de si funcionará de nuevo a menos que lo pruebe manualmente cada cinco minutos.
Con las pruebas, puede eliminar ese proceso manual de tener que probar el código y automatizar el proceso de prueba. Le ahorra tiempo y ayuda a todos al garantizar que el código con el que interactúan funcione como se espera.
Un curso muy útil si quieres conocer más de pruebas: https://platzi.com/clases/pruebas-software/
Mayor información del paquete utilizado: https://github.com/stretchr/testify
Gran artículo, Jose
Ya tenemos nuestro curso de Unit Testing en Go para la comunidad: https://platzi.com/cursos/go-unit-testing/
Hola Camila, Gracias, es muy grato.
Gracias por el curso, está genial. 😃