Einleitung: Was sind Catch2 und Google Test und wozu braucht man sie?
\n\nIn der modernen Softwareentwicklung mit C++ ist Testen kein Luxus, sondern eine Notwendigkeit. Bibliotheken für Modultests (Unit Testing) ermöglichen es Entwicklern, automatisch zu überprüfen, ob einzelne Komponenten eines Programms (Funktionen, Klassen, Module) korrekt funktionieren. Die beiden beliebtesten Bibliotheken für diesen Zweck sind Catch2 und Google Test (gtest).
\n\nCatch2 ist eine moderne, leichtgewichtige und sehr benutzerfreundliche Bibliothek für Modultests. Ihre Hauptbesonderheit ist die Verwendung von Makros, die Tests lesbar und wie normales Englisch aussehen lassen. Catch2 unterstützt den Behaviour-Driven Development (BDD)-Stil, die automatische Registrierung von Tests und erfordert keine komplexe Konfiguration.
\n\nGoogle Test (gtest) ist eine leistungsstarke und ausgereifte Bibliothek von Google, die in vielen großen Projekten der De-facto-Standard ist. Sie bietet eine umfangreiche Sammlung von Assertion-Makros, Mechanismen zur Erstellung von Test-Fixuren (Test Fixtures), parametrisierte Tests und eine hervorragende Integration mit dem Build-System CMake.
\n\nBeide Bibliotheken lösen die gleiche Aufgabe: Sie ermöglichen das Schreiben von Tests, die automatisch ausgeführt werden und über die Ergebnisse berichten. Die Wahl zwischen ihnen hängt oft von persönlichen Vorlieben, Projektanforderungen oder der vorhandenen Infrastruktur ab. In diesem Artikel werden wir beide Bibliotheken betrachten, da sie konzeptionell sehr ähnlich sind, aber Unterschiede in der Syntax und API aufweisen.
\n\nInstallation
\n\nIm Gegensatz zu Python (wo pip verwendet wird) erfolgt die Installation von Bibliotheken für C++ in der Regel über die Paketmanager des Systems oder über die Integration mit dem Build-System (z. B. CMake). Betrachten wir beide Varianten.
\n\nInstallation von Catch2
\nMethode 1: Über vcpkg (empfohlen)
\n# Installieren Sie vcpkg, falls noch nicht geschehen\ngit clone https://github.com/Microsoft/vcpkg.git\ncd vcpkg\n./bootstrap-vcpkg.sh # oder .\\bootstrap-vcpkg.bat unter Windows\n\n# Installieren Sie Catch2\n./vcpkg install catch2\n\n# Integration mit CMake\n./vcpkg integrate install\n\nMethode 2: Header-only (am einfachsten)
\nCatch2 kann als Header-only-Bibliothek verwendet werden. Laden Sie einfach die Datei catch.hpp aus dem offiziellen Repository herunter und legen Sie sie in Ihrem Projektordner ab. Binden Sie sie dann im Code ein:
#define CATCH_CONFIG_MAIN // Diese Zeile darf nur in einer .cpp-Datei vorkommen\n#include "catch.hpp"\n\nInstallation von Google Test
\nMethode 1: Über vcpkg
\n./vcpkg install gtest\n./vcpkg integrate install\n\nMethode 2: Über CMake FetchContent (empfohlen für Projekte mit CMake)
\nFügen Sie Folgendes in Ihre CMakeLists.txt ein:
include(FetchContent)\nFetchContent_Declare(\n googletest\n GIT_REPOSITORY https://github.com/google/googletest.git\n GIT_TAG release-1.12.1\n)\nFetchContent_MakeAvailable(googletest)\n\n# Jetzt können Sie target_link_libraries für Ihre Testdatei verwenden\nadd_executable(my_tests test.cpp)\ntarget_link_libraries(my_tests GTest::gtest_main)\n\nSchnellstart mit einem Codebeispiel
\n\nLassen Sie uns eine einfache Funktion schreiben und sie mit beiden Bibliotheken testen. Die Funktion soll die Fakultät einer Zahl berechnen.
\n\nBeispiel mit Catch2
\n#define CATCH_CONFIG_MAIN\n#include "catch.hpp"\n\n// Zu testende Funktion\nunsigned int factorial(unsigned int n) {\n if (n == 0) return 1;\n return n * factorial(n - 1);\n}\n\n// Testfall\nTEST_CASE("Fakultäten werden korrekt berechnet", "[factorial]") {\n REQUIRE(factorial(0) == 1);\n REQUIRE(factorial(1) == 1);\n REQUIRE(factorial(2) == 2);\n REQUIRE(factorial(3) == 6);\n REQUIRE(factorial(10) == 3628800);\n}\n\n// Ein weiterer Testfall mit Abschnitten\nTEST_CASE("Überprüfung von Grenzfällen", "[factorial][edge]") {\n SECTIO Auch in der Bibliothek
WebSocket-Bibliotheken für Node.js: ws, Socket.IO, uWS – ein vollständiger Überblick
Arbeiten mit Excel in Java: Apache POI und Alternativen
Datenvalidierung in Kotlin: Bibliotheken und Ansätze (Kotlin, Java)
Überwachung von PHP-Anwendungen mit PHPMetrics