Cómo leer la salida de pruebas en Go
Para facilitar la comprensión de la salida de las pruebas, primero explicaremos cómo funcionan las pruebas en la plataforma.
⚙️ La prueba del código en Go se realiza mediante el framework Testify, y las propias pruebas también están escritas en Go. La verificación del código se inicia automáticamente al presionar el botón «Comprobar». El programa bajo prueba se compila y se verifica con diferentes datos de entrada. Durante este proceso, las pruebas se aseguran de que el comportamiento del programa cumpla con las expectativas.
Cuando las pruebas se completan, el resultado de la verificación aparece en la pestaña «OUTPUT». Si se produce un error en esta etapa, es necesario leer la salida de las pruebas. Esta salida es nuestra principal herramienta de depuración de código.
Tipos de errores
Nadie escribe código de manera perfecta, por lo que tarde o temprano te enfrentarás a errores.
Los errores durante la ejecución del ejercicio se pueden dividir de manera condicional en tres tipos:
- Errores de compilación: son errores sintácticos que ocurren durante la compilación del programa.
- Errores de tiempo de ejecución: estos errores no afectan la compilación pero impiden la ejecución normal del programa.
- Errores de afirmación: errores causados por pruebas. Ocurren si el resultado de la función no coincide con el resultado esperado.
⛔Errores de compilación
Ejemplos de estos errores incluyen:
- Error de sintaxis;
- Acceso a una variable inexistente;
- Uso de tipos de datos incorrectos.
Si un programa en Go está sintácticamente incorrecto, el compilador mostrará un mensaje de error en pantalla:
Este mensaje de error contiene:
- Descripción del error.
- Indicación del archivo donde ocurrió el error.
- Número de línea en el archivo donde ocurrió el error.
⛔ Errores de tiempo de ejecución
Estos errores no afectan la compilación pero hacen que el programa no funcione como se espera. Estos problemas surgen durante la ejecución del programa compilado. Se pueden producir diversos eventos que interrumpen el flujo normal de ejecución del programa. Estos errores no están relacionados con las pruebas y señalan un problema en el código.
A diferencia de otros lenguajes, Go no tiene excepciones; se prefiere devolver errores de manera explícita. Sin embargo, el compilador puede analizar el programa durante la ejecución y señalar errores fatales. Por ejemplo, si un programa se queda inactivo en una situación de deadlock, se generará un error fatal:
Si la descripción no es suficiente, siempre se puede recurrir a la documentación, donde se describen los casos en los que pueden ocurrir diversos errores.
⛔ Errores de afirmación
Estos errores ocurren cuando el resultado de la función no coincide con el resultado esperado. Para entender esto, analicemos cómo se ven las pruebas para los ejercicios:
La función bajo prueba, SafeWrite()
, se llama en las pruebas con parámetros específicos. El resultado de la función se compara con un resultado esperado previamente definido. Si el resultado real y el esperado coinciden, las pruebas se consideran exitosas.
Examinemos más detenidamente la salida en la pestaña «OUTPUT» en caso de que las pruebas fallen:
Aquí vemos:
- Archivo de pruebas:
main_test.go
- Número de línea con la prueba fallida:
main_test.go:16
- Nombre de la prueba que falló:
Test: TestSafeWrite
- Resultado esperado: en la línea
expected
- Resultado real del código: en la línea
actual
Al estudiar esta salida, podemos entender qué causó la discrepancia en los resultados. Esto ayuda a corregir la razón del mal funcionamiento del código bajo prueba.
Depuración de código
A veces, es imposible entender desde el primer vistazo qué está causando el comportamiento incorrecto del código. En estos casos, entra en juego la depuración: la capacidad de observar el proceso de ejecución del código.
Existen varias formas de hacerlo, pero aquí examinaremos la más simple y común: la impresión de depuración que implica mostrar en pantalla los valores de las variables, las llamadas a funciones y los mensajes sobre la ejecución de las iteraciones del bucle durante la ejecución del programa. Para ello, simplemente agrega una llamada a la función fmt.Println()
con el valor que te interesa:
Luego, simplemente ejecuta la verificación de las pruebas nuevamente para ver el resultado de nuestra impresión de depuración en la pestaña «OUTPUT»:
Con la impresión de depuración, podemos seguir la ejecución del programa y descubrir dónde se ha infiltrado el error.
Sin Comentarios