Testen im C++-Track

Erfahre, wie du deine C++-Übungen auf Exercism testest


Jede Übung liefert die Unit-Tests und ein CMake-Build-Rezept. Die Implementierung schreibst du selbst. Jede Testdatei wird gegen deine Implementierung gelinkt und ergibt so ein ausführbares Konsolenprogramm, das die Tests ausführt. Wenn du das Testprogramm ausführst, bekommst du für jeden fehlgeschlagenen Test eine Meldung, und bei fehlgeschlagenen Tests wird ein Exit-Status ungleich null zurückgegeben.

Hinweis: Dein Code wird bei jedem Build deines Projekts gegen die Testsuite getestet. Wenn dein Code einen oder mehrere Tests nicht besteht, aber gültiger C++-Code ist, wird er trotzdem kompiliert.

So arbeitest du dich durch jede Übung:

  • Das erste Build mit CMake erstellen
  • Für jeden Unit-Test:
    • Behebe die Kompilierfehler, sodass der Test fehlschlägt.
    • Implementiere gerade so viel, dass der Test besteht.
    • Refaktoriere deine Implementierung, um die Lesbarkeit zu verbessern, Duplikate zu reduzieren usw.
    • Kommentiere den nächsten Test ein

Das erste Build mit CMake erstellen

Jede Übung bringt eine CMakeLists.txt-Datei mit den Unit-Tests mit. Sie enthält das fertige CMake-Rezept, das den Build für dich übernimmt. Du musst diese Datei normalerweise nicht bearbeiten. Das mitgelieferte Rezept geht davon aus, dass deine Implementierung aus einer Header-Datei und einer Quelldatei besteht, die nach der Übung benannt sind.

Die Übung bob erwartet zum Beispiel eine Implementierung in bob.h und bob.cpp. Bei Übungen mit Bindestrichen im Namen wird für die Quelldateien ein Unterstrich angenommen, word-count erwartet also word_count.h und word_count.cpp. Vielleicht ist deine Implementierung so einfach, dass sie komplett in den Header passt; dann kannst du die cpp-Datei weglassen.

Erstelle deine ersten Implementierungsdateien, bevor du CMake ausführst. Wenn die Dateien bob.h und bob.cpp beim Ausführen von CMake für die Übung bob nicht existieren, gibt CMake einen Fehler aus, dass Dateien nicht gefunden wurden. Diese Dateien dürfen leer sein, aber sie müssen existieren.

Mit diesem Rezept kann CMake ein passendes Projekt für deine Umgebung erzeugen, indem du cmake -G mit einem passenden Generator und dem Pfad zum Verzeichnis der Übung ausführst. CMake erzeugt ein Build-Skript, das zu deinem Betriebssystem passt. Damit die generierten Dateien nicht mit deinem Übungsquellcode vermischt werden, legt man üblicherweise ein Verzeichnis namens build an, das die generierten Build-Dateien und den kompilierten Code enthält. So bleibt dein Übungsordner übersichtlich und aufgeräumt.

Sobald CMake die Build-Umgebung erstellt hat, kannst du deinen Code mit dem passenden Befehl für deine Umgebung bauen:

  • Linux mit Make: make
  • Windows mit Visual Studio: Wähle im Menü Build / Build Solution.
  • MacOS mit Xcode: Wähle in der Toolbar Build.
  • MacOS mit „Unix Makefile": make wenn du die Exercism-CLI verwendest

Im Folgenden siehst du Beispiele, wie du CMake in verschiedenen Umgebungen ausführst.

Linux mit Make

Der Generatorname für CMake ist Unix Makefiles. Angenommen, die aktuelle Übung ist bob und wir sind im Übungsordner:

$ touch bob.{h,cpp}
$ mkdir build
$ cd build
$ cmake -G "Unix Makefiles" ..
$ make

Dieses Beispiel legt leere Dateien für die Implementierung an, bevor CMake ausgeführt wird.

Tippe einfach make im Build-Verzeichnis ein, um die Tests zu kompilieren. Das sollte Kompilierfehler erzeugen. Sobald die Fehler behoben sind, baut make die Tests und führt sie aus.

Windows mit Visual Studio

Visual Studio unterstützt CMake-Projekte nativ, du musst CMake also nicht separat installieren oder außerhalb von Visual Studio ausführen. Folge dieser Anleitung, um das CMake-Projekt in Visual Studio einzurichten.

MacOS mit Xcode

Der Generatorname für CMake ist Xcode. Angenommen, die aktuelle Übung ist bob und wir sind im Übungsordner:

$ touch bob.{h,cpp}
$ mkdir build
$ cd build
$ cmake -G Xcode ..

Dieses Beispiel generiert die XCode-Dateien, sodass du das Projekt in XCode öffnen kannst. Wenn das Projekt in XCode geöffnet ist, musst du möglicherweise ein weiteres Target hinzufügen. Für ein neues Target gehst du im Menü auf File -> New -> Target, dann OS X \ Application \ Command Line Tool -> Next, wähle C++ als Sprache und gib einen Target-Namen an. Führe den Code über das Target aus.

Wenn dein Terminal den Fehler Xcode x.x not supported ausgibt, ist Xcode höchstwahrscheinlich nicht auf deinem Rechner installiert oder deine Version ist veraltet. Bitte lade Xcode über den App Store oder über diesen Link herunter und installiere es. Fehler wie The CXX compiler identification is unknown lassen sich wahrscheinlich beheben, indem du die Anleitung zur Installation von GCC befolgst oder wie im obigen Absatz ein weiteres Target in Xcode hinzufügst.

MacOS mit Make wenn du die Exercism-CLI verwendest

Dieses Beispiel hilft speziell denen, die die Exercism-CLI-App zum Konfigurieren, Testen und Einreichen ihrer C++-Übungen verwenden möchten.

Der Generatorname für CMake ist Unix Makefiles. Angenommen, die aktuelle Übung ist bob und wir sind im Übungsordner:

$ touch bob.{h,cpp}
$ cmake -G "Unix Makefiles" .
$ exercism test

In diesem Beispiel erstellen wir zwar leere Dateien für die Implementierung, bevor wir CMake ausführen, aber wir erstellen kein leeres Build-Verzeichnis. Der Grund ist, dass die Exercism-CLI die Datei .exercism/metadata.json im Wurzelverzeichnis verwendet, um die Testfälle einzulesen.

Tippe einfach exercism test im Wurzelverzeichnis ein, um die Tests zu kompilieren. Das sollte Kompilierfehler erzeugen. Sobald die Fehler behoben sind, baut und führt ein erneutes exercism test die Tests über die Exercism-CLI aus.