Probar tus ejercicios en el track de Go

Aprende a probar tus ejercicios de Go en Exercism


Los ejercicios de Go que están dentro del directorio de tu proyecto de Exercism se pueden ejecutar cambiando al directorio del ejercicio y ejecutando go test.

cd exercism/project/directory/go/leap
go test

Tests con el detector de carreras de datos

Además de ejecutar go test, algunos ejercicios deben ejecutarse con un flag para el detector de carreras de datos que compruebe que tu solución no introduce errores de carreras de datos. En los ejercicios correspondientes encontrarás un recordatorio para ejecutar los tests con el flag -race del detector de carreras de datos. Ejecuta go test -race para comprobar si hay carreras de datos. Por ejemplo:

cd exercism/project/directory/go/bank-account
go test -race

Ejecutar benchmarks

La mayoría de los ejercicios incluyen benchmarks que puedes usar para determinar cómo afectan los cambios en tu solución a su rendimiento. Para ejecutar los benchmarks de un ejercicio, usa el comando go test -v --bench . --benchmem dentro del directorio del ejercicio.

Fíjate en esta salida.

BenchmarkReverse-16       403594              2537 ns/op             176 B/op         34 allocs/op

Esto significa que el benchmark necesitó 403594 iteraciones para medirse con fiabilidad. La velocidad media fue de 2537 ns por iteración. Se produjeron 34 asignaciones de memoria por operación, con una media de 176 bytes.

Ejemplos comprobables

En algunos ejercicios se usan tests de ejemplo, que se ejecutan junto con los tests estándar del ejercicio. Estos ejemplos sirven para documentar y verificar la API del ejercicio y pueden ser útiles para determinar cuál es la API que se espera del ejercicio.

Go fmt

Ejecuta go fmt en tu código antes de enviarlo.

Consejos y sugerencias

Cómo programar el ejercicio

El README.md de cada ejercicio ofrece una descripción general, pero el programa de tests de Go será muy concreto. Abre el programa de tests y échale un vistazo rápido; aunque parezca hacer trampa, hazlo de todos modos. Busca comentarios útiles, datos de test y, simplemente, los nombres de las funciones de test. Prueba a ejecutar go test antes de haber escrito nada y fíjate en si los mensajes de error te dan una idea de por dónde empezar.

Tu primer objetivo es conseguir que algo compile, aunque no pase los tests. Para ello, debes crear stubs de las funciones. Es decir, deja el cuerpo vacío, salvo aquello que deba devolver. Escribe return 0 o return "" o lo que sea, solo para que compile. A veces, para averiguar las firmas de las funciones tendrás que volver al programa de tests y leerlo con más detalle. Cuando hayas averiguado todas las firmas de funciones necesarias, el programa de tests se quejará de que 0 es la respuesta incorrecta. Ahora empieza a rellenar los cuerpos de las funciones.

Cómo corregir

A menudo los tests se detienen en el primer error. Corrige ese y repite hasta que no queden errores. go test tiene opciones útiles. go test -v da una salida más detallada. go test -run <regexp> ejecuta solo los tests cuyos nombres coinciden con <regexp>.

Los panics producen mucha salida. Puede parecer intimidante al principio, pero ten valor. Fíjate en la parte superior de la salida del panic para encontrar el mensaje del panic. Eso debería darte una descripción general del problema. Después, lee el resto buscando la primera referencia a tu código. A menudo te señalará directamente el problema.

Para encontrar problemas en programas concurrentes, prueba go test -race.

Limpiar tu código

Lo repetimos: ejecuta go fmt. Golint puede informarte de problemas de estilo en tu código que go fmt no detecta. También puedes echar un vistazo a go vet, que advierte de posibles problemas en tu código. Lee y ten en cuenta los comentarios habituales de las revisiones de código. En un ejercicio que implique concurrencia, prueba go test -race aunque pase sus tests. Ten en cuenta la legibilidad aunque optimices el rendimiento del benchmark. A veces la optimización puede ayudarte a descubrir soluciones concisas y legibles, pero existe la tentación de abandonar la legibilidad en busca del rendimiento.

Tests adicionales

Unos pocos ejercicios tienen tests adicionales que no se ejecutan solo con go test. Si además del ejercicio normal resuelves el ejercicio adicional, tendrás que escribir go test -tags bonus, o algún comando similar de los que aparecen en la documentación del programa de tests.