Testare sul track Go

Scopri come testare i tuoi esercizi di Go su Exercism


Gli esercizi Go all'interno della directory del tuo progetto exercism si possono eseguire spostandosi nella directory dell'esercizio e lanciando go test.

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

Test con il rilevatore di data race

Oltre ad eseguire go test, alcuni esercizi vanno eseguiti con un flag per il rilevatore di data race per verificare che la soluzione non introduca bug di data race. Negli esercizi pertinenti troverai un promemoria per eseguire i test con il flag -race del rilevatore di data race. Esegui go test -race per verificare la presenza di data race. Per esempio:

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

Eseguire i benchmark

La maggior parte degli esercizi contiene dei benchmark, che puoi usare per determinare come le modifiche alla soluzione ne influenzano le prestazioni. Per eseguire i benchmark di un esercizio, usa il comando go test -v --bench . --benchmem all'interno della directory dell'esercizio.

Considera questo output.

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

Significa che il benchmark ha richiesto 403594 iterazioni per essere cronometrato in modo affidabile. La velocità media è stata di 2537 ns per ciclo. Sono avvenute 34 allocazioni di memoria per operazione, con una media di 176 byte.

Esempi testabili

Gli esempi di test sono usati in alcuni esercizi e vengono eseguiti insieme ai test standard dell'esercizio. Questi esempi servono a documentare e verificare l'API dell'esercizio e possono essere utili per capire quale sia l'API attesa dell'esercizio.

Go fmt

Esegui go fmt sul codice prima di inviarlo.

Suggerimenti e consigli

Scrivere il codice dell'esercizio

Il README.md di ogni esercizio fornisce una descrizione generale, ma il programma di test Go sarà molto più specifico. Apri il programma di test e dagli un'occhiata veloce: anche se ti sembra di barare, fallo comunque. Cerca commenti utili, dati di test e anche solo i nomi delle funzioni di test. Prova a eseguire go test prima di aver scritto qualsiasi cosa e vedi se i messaggi di errore ti danno un'idea di dove iniziare.

Il primo obiettivo è far compilare qualcosa, anche se non supera i test. Per questo, conviene creare degli «stub» delle funzioni. Significa lasciare vuoto il corpo, tranne quello che devono restituire. Scrivi return 0 o return "" o qualsiasi cosa pur di farlo compilare. A volte, per capire le firme delle funzioni, dovrai tornare al programma di test e leggerlo più in dettaglio. Una volta capite tutte le firme delle funzioni richieste, il programma di test si lamenterà che 0 è la risposta sbagliata. Ora inizia a riempire i corpi delle funzioni.

Correggere gli errori

Spesso i test si fermano al primo errore. Correggi quello, ripeti finché non ci sono più errori. go test ha opzioni utili. go test -v fornisce un output più dettagliato. go test -run <regexp> esegue solo i test i cui nomi corrispondono a <regexp>.

I panic producono molto output. All'inizio può sembrare spaventoso, ma fatti coraggio. Guarda proprio all'inizio dell'output del panic per trovare il messaggio di panic. Dovrebbe darti una descrizione generale del problema. Poi leggi il resto cercando il primo riferimento al codice. Spesso ti indicherà proprio il problema.

Per trovare problemi nei programmi concorrenti, prova go test -race.

Ripulire il codice

Lo ripetiamo: esegui go fmt. Golint può segnalarti problemi di stile nel codice che go fmt non rileva. Puoi anche dare un'occhiata a go vet, che avvisa di potenziali problemi nel codice. Leggi e tieni presente i commenti frequenti dalle code review. Per un esercizio che coinvolge la concorrenza, prova go test -race anche se supera i test. Tieni a mente la leggibilità anche quando ottimizzi per le prestazioni nei benchmark. A volte l'ottimizzazione può aiutarti a scoprire soluzioni concise e leggibili, ma la tentazione di abbandonare la leggibilità in nome delle prestazioni è sempre in agguato.

Test bonus

Alcuni esercizi hanno dei test bonus che non vengono eseguiti con il solo go test. Se risolvi l'esercizio bonus oltre a quello normale, dovrai digitare go test -tags bonus, o un comando simile indicato nella documentazione del programma di test.