Δοκιμές στο track της Go

Μάθε πώς να δοκιμάζεις τις ασκήσεις σου στη Go στο Exercism


Μπορείς να τρέξεις τις ασκήσεις Go μέσα στον κατάλογο του project σου στο exercism, μεταβαίνοντας στον κατάλογο της άσκησης και τρέχοντας go test.

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

Τεστ με ανιχνευτή ανταγωνισμού δεδομένων

Εκτός από το τρέξιμο του go test, κάποιες ασκήσεις θα πρέπει να τρέχουν με flag για τον ανιχνευτή ανταγωνισμού δεδομένων, ώστε να ελέγξεις ότι η λύση σου δεν εισάγει σφάλματα ανταγωνισμού δεδομένων. Θα βρεις μια υπενθύμιση να τρέξεις τα τεστ με το flag -race του ανιχνευτή ανταγωνισμού δεδομένων στις σχετικές ασκήσεις. Τρέξε go test -race για να ελέγξεις για ανταγωνισμό δεδομένων. Για παράδειγμα:

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

Εκτέλεση benchmark

Οι περισσότερες ασκήσεις περιέχουν benchmark, τα οποία μπορείς να χρησιμοποιήσεις για να δεις πώς οι αλλαγές στη λύση σου επηρεάζουν τις επιδόσεις της. Για να τρέξεις τα benchmark μιας άσκησης, χρησιμοποίησε την εντολή go test -v --bench . --benchmem μέσα στον κατάλογο της άσκησης.

Δες αυτή την έξοδο.

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

Αυτό σημαίνει ότι το benchmark χρειάστηκε 403594 επαναλήψεις για να μετρηθεί αξιόπιστα. Η μέση ταχύτητα ήταν 2537 ns ανά βρόχο. Συνέβησαν 34 δεσμεύσεις μνήμης ανά λειτουργία, με μέσο όρο 176 byte.

Παραδείγματα με τεστ

Τα παραδείγματα τεστ χρησιμοποιούνται σε κάποιες ασκήσεις και τρέχουν μαζί με τα κανονικά τεστ της άσκησης. Αυτά τα παραδείγματα χρησιμοποιούνται για την τεκμηρίωση και την επαλήθευση του API της άσκησης και μπορούν να σου φανούν χρήσιμα για να καταλάβεις ποιο είναι το αναμενόμενο API της άσκησης.

Go fmt

Τρέξε το go fmt στον κώδικά σου πριν τον υποβάλεις.

Υποδείξεις και συμβουλές

Γράφοντας τον κώδικα της άσκησης

Το README.md κάθε άσκησης δίνει μια γενική περιγραφή, αλλά το πρόγραμμα τεστ της Go θα είναι πολύ πιο συγκεκριμένο. Άνοιξε το πρόγραμμα τεστ και ρίξε μια γρήγορη ματιά. Αν σου φαίνεται σαν κλεψιά, κάν' το έτσι κι αλλιώς. Ψάξε για χρήσιμα σχόλια, δεδομένα τεστ, ακόμα και για τα ονόματα των συναρτήσεων τεστ. Δοκίμασε να τρέξεις το go test πριν γράψεις οτιδήποτε και δες αν τα μηνύματα σφάλματος σου δίνουν μια ιδέα για το πού να ξεκινήσεις.

Ο πρώτος σου στόχος είναι να καταφέρεις κάτι να μεταγλωττιστεί, ακόμα κι αν αποτυγχάνει στα τεστ. Γι' αυτό, θα πρέπει να δημιουργήσεις "stub" συναρτήσεις. Αυτό σημαίνει να αφήσεις το σώμα κενό, εκτός από αυτό που πρέπει οπωσδήποτε να επιστρέψει. Γράψε return 0 ή return "" ή ό,τι άλλο χρειαστεί μόνο και μόνο για να μεταγλωττιστεί. Μερικές φορές, για να καταλάβεις τις υπογραφές των συναρτήσεων, θα χρειαστεί να γυρίσεις στο πρόγραμμα τεστ και να το διαβάσεις πιο προσεκτικά. Μόλις καταλάβεις όλες τις απαιτούμενες υπογραφές συναρτήσεων, το πρόγραμμα τεστ θα παραπονεθεί ότι το 0 είναι λάθος απάντηση. Τώρα ξεκίνα να γεμίζεις τα σώματα των συναρτήσεων.

Διόρθωση

Τα τεστ συχνά σταματούν στο πρώτο σφάλμα. Διόρθωσέ το, και επανάλαβε μέχρι να μην υπάρχουν σφάλματα. Το go test έχει χρήσιμες επιλογές. Το go test -v θα σου δώσει πιο αναλυτική έξοδο. Το go test -run <regexp> θα τρέξει μόνο τα τεστ των οποίων τα ονόματα ταιριάζουν με το <regexp>.

Τα panic παράγουν πολλή έξοδο. Μπορεί να φαίνεται τρομακτικό στην αρχή, αλλά κάνε κουράγιο. Κοίτα στο πάνω-πάνω σημείο της εξόδου του panic για το μήνυμα του panic. Αυτό θα σου δώσει μια γενική περιγραφή του προβλήματος. Έπειτα διάβασε τα υπόλοιπα ψάχνοντας την πρώτη αναφορά στον κώδικά σου. Συχνά θα σε οδηγήσει κατευθείαν στο πρόβλημα.

Για να βρεις προβλήματα σε προγράμματα με ταυτοχρονισμό, δοκίμασε το go test -race.

Καθαρίζοντας τον κώδικά σου

Ας το πούμε άλλη μια φορά: τρέξε το go fmt. Το Golint μπορεί να σε ενημερώσει για θέματα ύφους στον κώδικά σου που το go fmt δεν πιάνει. Μπορείς επίσης να ρίξεις μια ματιά στο go vet, το οποίο προειδοποιεί για πιθανά προβλήματα στον κώδικά σου. Διάβασε και ακολούθησε τα συχνά σχόλια από ελέγχους κώδικα. Για μια άσκηση που περιλαμβάνει ταυτοχρονισμό, δοκίμασε το go test -race ακόμα κι αν περνάει τα τεστ της. Να έχεις στο μυαλό σου την αναγνωσιμότητα ακόμα κι αν βελτιστοποιείς για επιδόσεις στο benchmark. Κάποιες φορές η βελτιστοποίηση μπορεί να σε βοηθήσει να ανακαλύψεις λύσεις σύντομες και ευανάγνωστες, αλλά μπορεί να υπάρξει ο πειρασμός να εγκαταλείψεις την αναγνωσιμότητα κυνηγώντας την απόδοση.

Τεστ μπόνους

Λίγες ασκήσεις έχουν τεστ μπόνους που δεν τρέχουν με σκέτο go test. Αν λύνεις την άσκηση μπόνους επιπλέον της κανονικής άσκησης, θα πρέπει να πληκτρολογήσεις go test -tags bonus, ή κάποια παρόμοια εντολή όπως δίνεται στην τεκμηρίωση του προγράμματος τεστ.