Testen im Go-Track

Lerne, wie du deine Go-Übungen auf Exercism testest


Die Go-Übungen in deinem Exercism-Projektverzeichnis kannst du ausführen, indem du in das Übungsverzeichnis wechselst und go test ausführst.

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

Tests mit dem Data Race Detector

Neben go test solltest du einige Übungen mit einem Flag für den Data Race Detector ausführen, um zu prüfen, dass deine Lösung keine Fehler durch Data Races einführt. In den betreffenden Übungen findest du einen Hinweis, die Tests mit dem Flag -race für den Data Race Detector auszuführen. Führe go test -race aus, um auf Data Races zu prüfen. Zum Beispiel:

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

Benchmarks ausführen

Die meisten Übungen enthalten Benchmarks, mit denen du feststellen kannst, wie sich Änderungen an deiner Lösung auf ihre Leistung auswirken. Um die Benchmarks für eine Übung auszuführen, verwende den Befehl go test -v --bench . --benchmem im Übungsverzeichnis.

Sieh dir diese Ausgabe an.

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

Das bedeutet, dass der Benchmark 403594 Iterationen brauchte, um zuverlässig gemessen zu werden. Die durchschnittliche Geschwindigkeit betrug 2537 ns pro Schleifendurchlauf. Pro Operation fanden 34 Speicherzuweisungen statt, mit durchschnittlich 176 Bytes.

Testbare Beispiele

Beispieltests werden in einigen Übungen verwendet und laufen zusammen mit den normalen Tests der Übung. Diese Beispiele dienen der Dokumentation und Überprüfung der API der Übung und können dir helfen herauszufinden, wie die erwartete API der Übung aussieht.

Go fmt

Bitte führe go fmt aus, bevor du deinen Code abgibst.

Hinweise und Tipps

Die Übung programmieren

Die README.md jeder Übung enthält eine allgemeine Beschreibung, aber das Go-Testprogramm ist sehr genau. Öffne das Testprogramm und wirf einen kurzen Blick hinein. Auch wenn es sich wie Schummeln anfühlt: Mach es trotzdem. Achte auf hilfreiche Kommentare, Testdaten und allein die Namen der Testfunktionen. Versuch, go test auszuführen, bevor du etwas geschrieben hast, und schau, ob dir die Fehlermeldungen einen Anhaltspunkt geben, wo du anfangen kannst.

Dein erstes Ziel ist es, etwas zum Kompilieren zu bringen, auch wenn es die Tests nicht besteht. Dafür solltest du Funktionen „stubben“. Das heißt: Lass den Funktionsrumpf leer, bis auf das, was sie zurückgeben muss. Schreib return 0 oder return "" oder was auch immer, nur damit es kompiliert. Manchmal musst du zum Testprogramm zurückgehen und genauer lesen, um die Funktionssignaturen herauszufinden. Sobald du alle erforderlichen Funktionssignaturen herausgefunden hast, wird sich das Testprogramm beschweren, dass 0 die falsche Antwort ist. Jetzt kannst du anfangen, die Funktionsrümpfe zu füllen.

Fehler beheben

Die Tests stoppen oft beim ersten Fehler. Behebe ihn, und wiederhole das, bis keine Fehler mehr auftreten. go test hat nützliche Optionen. go test -v liefert eine ausführlichere Ausgabe. go test -run <regexp> führt nur Tests mit Namen aus, die auf <regexp> passen.

Panics erzeugen jede Menge Ausgabe. Das wirkt am Anfang vielleicht beängstigend, aber nur Mut. Schau ganz oben in der Panic-Ausgabe nach der Panic-Meldung. Sie sollte das Problem grob beschreiben. Lies dann den Rest durch und such nach dem ersten Verweis auf deinen Code. Der zeigt oft direkt auf das Problem.

Um Probleme in nebenläufigen Programmen zu finden, probier go test -race aus.

Deinen Code aufräumen

Und noch einmal: Führe go fmt aus. Golint kann dich auf Stilprobleme in deinem Code hinweisen, die go fmt nicht erkennt. Vielleicht schaust du dir auch go vet an, das vor möglichen Problemen in deinem Code warnt. Lies die häufigen Kommentare aus Code Reviews und beherzige sie. Bei einer Übung mit Nebenläufigkeit probier go test -race aus, auch wenn sie ihre Tests besteht. Denk an die Lesbarkeit, auch wenn du auf Benchmark-Leistung optimierst. Manchmal hilft dir Optimierung, prägnante und lesbare Lösungen zu entdecken, aber es kann verlockend sein, die Lesbarkeit für die Leistung aufzugeben.

Bonus-Tests

Einige wenige Übungen haben Bonus-Tests, die nicht mit go test allein laufen. Wenn du zusätzlich zur regulären Übung die Bonus-Übung löst, musst du go test -tags bonus eingeben oder einen ähnlichen Befehl, wie er in der Dokumentation des Testprogramms angegeben ist.