Einleitung: Warum Ihr C++-Code Schutz braucht?
\n\nStellen Sie sich vor, Sie haben ein Programm in C++ geschrieben. Es wird fehlerfrei kompiliert, startet und liefert sogar ein Ergebnis. Sie atmen erleichtert auf und senden den Code in die Produktion. Einen Tag später schreibt Ihnen ein Kollege: „Hey, deine Funktion calculateSum stürzt ab, wenn du eine negative Zahl übergibst.“ Und Sie beginnen fieberhaft, den Fehler zu suchen, indem Sie Hunderte von Codezeilen durchlesen.
Kommt Ihnen das bekannt vor? Wenn ja, sind Sie hier genau richtig. C++-Testen ist keine langweilige Bürokratie, sondern Ihr persönlicher Schutzschild gegen solche Vorfälle. In diesem Artikel schauen wir uns an, wo ein Anfänger mit dem C++-Testen beginnen kann, ohne sich in theoretischen Tiefen zu verlieren. Sie erfahren, welche Werkzeuge Sie verwenden, wie Sie Ihre ersten Tests schreiben und warum Ihnen das Stunden an Nerven spart.
\n\nWas ist Unit-Testing und warum wird es benötigt?
\n\nUnit-Testing (oder Modultests) ist die Überprüfung einzelner „Bausteine“ Ihres Codes: Funktionen, Klassen, Methoden. Sie schreiben ein kleines Programm, das Ihre Funktion mit bestimmten Daten aufruft und prüft, ob das Ergebnis mit dem Erwarteten übereinstimmt.
\n\nWarum braucht ein Anfänger das?
\n- \n
- Seelenfrieden: Sie wissen genau, dass Ihr Code funktioniert. \n
- Geschwindigkeit: Sie haben keine Angst, Änderungen vorzunehmen, weil die Tests sofort sagen, ob etwas kaputtgegangen ist. \n
- Dokumentation: Tests sind ein lebendiges Beispiel für die Verwendung Ihres Codes. \n
Ohne C++-Testen gleicht ein Projekt einem Haus, das ohne Fundament gebaut wurde. Es steht zwar, aber das erste Erdbeben (sprich: eine Änderung der Anforderungen) wird es zerstören.
\n\nWerkzeuge für C++-Tests: Das erste Framework auswählen
\n\nFür Unit-Tests in C++ gibt es mehrere beliebte Frameworks. Für Anfänger empfehle ich zwei: Google Test (gtest) und Catch2. Beide sind kostenlos, haben eine hervorragende Dokumentation und sind einfach einzubinden.
\n\nGoogle Test (gtest)
\nDer Industriestandard. Wird bei Google, YouTube und vielen Open-Source-Projekten verwendet. Leistungsstark, erfordert aber etwas Einrichtung.
\n\nCatch2
\nLeichter und „anfängerfreundlicher“. Wird mit einer einzigen Header-Datei eingebunden. Ideal für den Start.
\n\nIn diesem Artikel verwenden wir Catch2 – es ist minimalistisch und ermöglicht es Ihnen, sich auf das Wesentliche zu konzentrieren, anstatt auf die Einrichtung.
\n\nWie installiert man Catch2 und schreibt den ersten Test?
\n\nDie Installation von Catch2 ist einfach. Laden Sie die einzelne Header-Datei catch.hpp aus dem offiziellen Repository herunter und legen Sie sie in den Ordner Ihres Projekts. Kein cmake, make oder Linken erforderlich.
Jetzt schreiben wir ein einfaches C++-Programm und testen es.
\n\nBeispiel: Additionsfunktion
\nErstellen Sie eine Datei calculator.cpp:
#include <iostream>\n#include "catch.hpp"\n\n// Die zu testende Funktion\nint add(int a, int b) {\n return a + b;\n}\n\n// Test\nTEST_CASE("Addition funktioniert korrekt", "[math]") {\n REQUIRE(add(2, 3) == 5);\n REQUIRE(add(-1, 1) == 0);\n REQUIRE(add(0, 0) == 0);\n REQUIRE(add(100, 200) == 300);\n}\n\nKompilieren und ausführen:
\n\ng++ -std=c++11 calculator.cpp -o calculator_test\n./calculator_test\n\nSie sehen etwas wie:
\n\nAll tests passed (4 assertions in 1 test case)\n\nHerzlichen Glückwunsch! Sie haben Ihren ersten Unit-Test in C++ geschrieben. Lassen Sie uns analysieren, was hier passiert ist:
\n- \n
TEST_CASE– ein Makro, das ein Testszenario erstellt. \nREQUIRE– überprüft eine Bedingung. Wenn sie falsch ist, schlägt der Test fehl. \n"[math]"– ein Tag zur Gruppierung von Tests. \n
Praktische Tipps: Wie man gute Tests schreibt
\n\nEinfach einen Test zu schreiben, reicht nicht. Man muss nützliche Tests schreiben. Hier sind einige Regeln, die Ihr Unit-Testing auf das nächste Level bringen.