Aprende a probar tus ejercicios de Go en Exercism
Puedes ejecutar los ejercicios de Go dentro del directorio de tu proyecto de Exercism si cambias al directorio del ejercicio y ejecutas go test.
cd exercism/project/directory/go/leap
go test
Además de ejecutar go test, algunos ejercicios se deben ejecutar con una bandera para el detector de carreras de datos, y así verificar que tu solución no introduzca errores de carreras de datos.
En los ejercicios correspondientes encontrarás un recordatorio para ejecutar las pruebas con la bandera -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
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.
Considera esta salida.
BenchmarkReverse-16 403594 2537 ns/op 176 B/op 34 allocs/op
Esto significa que el benchmark necesitó 403594 iteraciones para medirse de forma confiable. La velocidad promedio fue de 2537 ns por iteración. Ocurrieron 34 asignaciones de memoria por operación, con un promedio de 176 bytes.
En algunos ejercicios se usan pruebas de ejemplo que se ejecutan junto con las pruebas 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 esperada del ejercicio.
Ejecuta go fmt en tu código antes de enviarlo.
El README.md de cada ejercicio da una descripción general, pero el programa de pruebas de Go será muy específico.
Abre el programa de pruebas y échale un vistazo rápido; aunque parezca hacer trampa, hazlo de todos modos.
Busca comentarios útiles, datos de prueba y, simplemente, los nombres de las funciones de prueba.
Intenta ejecutar go test antes de haber escrito nada y fíjate si los mensajes de error te dan una idea de por dónde empezar.
Tu primera meta es lograr que algo compile, aunque no pase las pruebas.
Para eso, deberías dejar funciones «stub».
Es decir, deja el cuerpo vacío, salvo por lo que deba devolver.
Escribe return 0 o return "" o lo que sea, solo para que compile.
A veces, para deducir las firmas de las funciones tendrás que volver al programa de pruebas y leerlo con más detalle.
Una vez que hayas deducido todas las firmas de funciones requeridas, el programa de pruebas se quejará de que 0 es la respuesta incorrecta.
Ahora empieza a completar los cuerpos de las funciones.
A menudo las pruebas se detienen en el primer error.
Corrige ese error y repite hasta que no queden errores.
go test tiene opciones útiles.
go test -v muestra una salida más detallada. go test -run <regexp> ejecuta solo las pruebas cuyos nombres coincidan con <regexp>.
Los panics producen mucha salida. Puede dar miedo al principio, pero sé valiente. Mira justo al inicio de la salida del panic para encontrar el mensaje del panic. Eso debería darte una descripción general del problema. Luego lee el resto buscando la primera referencia a tu código. A menudo eso te señalará directamente el problema.
Para encontrar problemas en programas concurrentes, prueba go test -race.
Lo repetimos: ejecuta go fmt.
Golint puede informarte sobre problemas de estilo en tu código que go fmt no detecta.
También puedes revisar go vet, que advierte sobre posibles problemas en tu código.
Lee y toma en cuenta los comentarios frecuentes en las revisiones de código.
En un ejercicio que involucre concurrencia, prueba go test -race aunque pase sus pruebas.
Ten presente la legibilidad aunque optimices para el rendimiento en los benchmarks.
A veces la optimización puede ayudarte a descubrir soluciones concisas y legibles, pero puede existir la tentación de abandonar la legibilidad en busca del rendimiento.
Algunos ejercicios tienen pruebas extra que no se ejecutan solo con go test.
Si vas a resolver el ejercicio extra además del ejercicio normal, tendrás que escribir go test -tags bonus o algún comando similar, como se indique en la documentación del programa de pruebas.