doctest für C++: Vollständiges Tutorial mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

doctest für C++: Vollständiges Tutorial mit Beispielen

1. Was ist doctest und warum braucht man es?

doctest ist ein leichtgewichtiges, selbstdokumentierendes Framework für Unit-Tests in C++. Seine Hauptstärken sind minimale Kompilierzeit und einfache Handhabung. Im Gegensatz zu schweren Frameworks wie Google Test oder Boost.Test ist doctest eine reine Header-Only-Bibliothek, die mit einer einzigen Zeile #include <doctest/doctest.h> eingebunden wird. Das macht es zur idealen Wahl für Projekte, bei denen schnelle Build-Zeiten und keine externen Abhängigkeiten entscheidend sind.

Warum braucht man doctest? In der modernen C++-Entwicklung ist Code-Testing kein Luxus, sondern eine Notwendigkeit. Mit doctest schreiben Sie Tests direkt neben der Funktionsimplementierung – das verbessert die Lesbarkeit und erleichtert die Wartung. Sie können Tests in Header-Dateien einbetten, und sie werden automatisch aus dem finalen Build entfernt, wenn Sie ohne das Flag -DDOCTEST_CONFIG_DISABLE kompilieren. Das bietet einen einzigartigen Vorteil: Tests leben mit dem Code, ohne die Performance der Release-Version zu beeinträchtigen.

doctest unterstützt alle modernen C++-Standards (C++11 und höher), läuft auf allen wichtigen Plattformen (Windows, Linux, macOS) und lässt sich problemlos in Continuous-Integration-Systeme (CI) integrieren. Es bietet eine Vielzahl von Makros für Assertions, Testgruppierung, Exception-Handling und Berichterstellung. Aufgrund seiner Leichtigkeit wird doctest häufig in der Embedded-Entwicklung, in Game-Engines und anderen Projekten eingesetzt, wo jedes Kilobyte und jede Millisekunde Kompilierzeit zählt.

2. Installation

doctest ist eine Header-Only-Bibliothek, daher reduziert sich die Installation auf das Kopieren der Header-Datei in Ihr Projekt. Der einfachste Weg ist die Verwendung des Paketmanagers vcpkg oder Conan, oder das manuelle Herunterladen der Datei.

Variante 1: Installation mit vcpkg (empfohlen)

# Installieren Sie vcpkg, falls noch nicht geschehen:
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh  # Linux/macOS
# oder .\bootstrap-vcpkg.bat (Windows)

# Installieren Sie doctest:
./vcpkg install doctest

# Binden Sie es in Ihr CMake-Projekt ein:
# find_package(doctest CONFIG REQUIRED)
# target_link_libraries(your_target PRIVATE doctest::doctest)

Variante 2: Installation mit Conan

# Fügen Sie in conanfile.txt hinzu:
[requires]
doctest/2.4.11

[generators]
cmake

# Installieren Sie:
conan install . --build=missing

Variante 3: Manuelle Installation (einfach Datei kopieren)

# Laden Sie die neueste Version von GitHub herunter:
wget https://raw.githubusercontent.com/doctest/doctest/master/doctest/doctest.h

# Legen Sie die Datei in den include-Ordner Ihres Projekts
# Verwenden Sie dann im Code einfach:
# #include "doctest.h"

Stellen Sie nach der Installation sicher, dass der Compiler die Header-Datei finden kann. Für die Kompilierung der Tests reicht jede moderne Version von GCC, Clang oder MSVC aus.

3. Schnellstart – Minimales funktionierendes Beispiel

Erstellen Sie eine Datei test_example.cpp mit folgendem Inhalt:

#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
#include "doctest.h"

int factorial(int n) {
    if (n <= 1) return 1;
    return n * factorial(n - 1);
}

TEST_CASE("testing the factorial function") {
    CHECK(factorial(0) == 1);
    CHECK(factorial(1) == 1);
    CHECK(factorial(5) == 120);
    CHECK(factorial(10) == 3628800);
}

Kompilieren und ausführen:

g++ -std=c++11 test_example.cpp -o test_example
./test_example

Sie sehen folgende Ausgabe:

===========================================================================
[doctest] test cases:    1 |    1 passed |    0 failed |    0 skipped
[doctest] assertions:    4 |    4 passed |    0 failed |
[doctest]                    

Empfehlungen