Verwenden von Boost.Test für C++ in Visual Studio

In Visual Studio 2017 und höher ist der Testadapter „Boost.Test“ als Standardkomponente in die Visual Studio-IDE integriert. Es ist eine Komponente der Workload Desktopentwicklung mit C++.

Test Adapter for Boost.Test

Wenn die Workload Desktopentwicklung mit C++ nicht installiert ist, öffnen Sie Visual Studio-Installer. Wählen Sie zunächst die Workload Desktopentwicklung mit C++ und anschließend die Schaltfläche Ändern aus.

Installieren von Boost

Boost.Test erfordert Boost. Wenn Sie Boost noch nicht installiert haben, sollten Sie den vcpkg-Paket-Manager verwenden.

  1. Falls Sie diesen noch nicht installiert haben, holen Sie dies nach, indem Sie die unter Vcpkg: Ein C++-Paket-Manager für Windows beschriebenen Schritte ausführen.

  2. Installieren Sie die dynamische oder statische Bibliothek für Boost.Test:

    • Führen Sie vcpkg install boost-test aus, um die dynamische Bibliothek für Boost.Test zu installieren.

      ODER

    • Führen Sie vcpkg install boost-test:x86-windows-static aus, um die statische Bibliothek für Boost.Test zu installieren.

  3. Führen Sie vcpkg integrate install aus, um Visual Studio mit der Bibliothek zu konfigurieren und Pfade in den Boost-Headern und Binärdateien einzuschließen.

Sie haben die Wahl, wie Sie Ihre Tests in Ihrer Projektmappe in Visual Studio konfigurieren: Sie können Ihren Testcode in das zu testende Projekt aufnehmen oder ein separates Testprojekt für Ihre Tests erstellen. Beide Optionen haben Vor- und Nachteile.

Hinzufügen von Tests in Ihrem Projekt

In Visual Studio 2017, Version 15.6 und höher, können Sie Ihrem Projekt eine Elementvorlage für Tests hinzufügen. Sowohl die Tests als auch der Code befinden sich im selben Projekt. Zum Generieren eines Testbuilds müssen Sie eine separate Buildkonfiguration erstellen. Außerdem müssen Sie die Tests aus den Debug-und Releasebuilds heraushalten.

Visual Studio 2017 Version 15.5 enthält keine vorkonfigurierten Testprojekte oder Elementvorlagen für Boost.Test. Anhand dieser Anleitungen können Sie ein separates Testprojekt erstellen und konfigurieren.

Erstellen eines Boost.Test-Elements

  1. Sie können eine CPP-Datei für Ihre Tests erstellen, indem Sie im Projektmappen-Explorer erst mit der rechten Maustaste auf den Projektknoten klicken und anschließend mit der linken auf Hinzufügen>Neues Element.

  2. Erweitern Sie im Dialogfeld Neues Element hinzufügen die Optionen Installiert>Visual C++>Testen. Wählen Sie Boost.Test aus, und klicken Sie auf Hinzufügen, um Test.cpp zu dem Projekt hinzuzufügen.

    Boost.Test Item Template

Die neue Datei Test.cpp enthält eine Beispieltestmethode. In diese Datei können Sie Ihre eigenen Headerdateien aufnehmen sowie Tests für Ihre App schreiben.

Die Testdatei verwendet außerdem Makros, um eine neue main-Routine für Testkonfigurationen zu definieren. Wenn Sie das Projekt jetzt erstellen, wird ein LNK2005-Fehler zurückgegeben, z. B. „_main already defined in main.obj“ (_main ist bereits in main.obj definiert).

Erstellen und Aktualisieren von Buildkonfigurationen

  1. Zum Erstellen einer Testkonfiguration klicken Sie in der Menüleiste auf Build>Konfigurations-Manager. Öffnen Sie im Dialogfeld Konfigurations-Manager die Dropdownliste unter Active solution configuration (Aktive Projektmappenkonfiguration), und klicken Sie auf Neu. Geben Sie im Dialogfeld Active solution configuration (Aktive Projektmappenkonfiguration) einen Namen wie „Debug UnitTests“ (Debuggen, Komponententests) ein. Wählen Sie unter Copy settings from (Einstellungen kopieren aus) Debug aus, und klicken Sie OK.

  2. Schließen Sie den Testcode aus Ihren Debug- und Releasekonfigurationen aus: Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf „Test.cpp“, und wählen Sie Eigenschaften aus. Öffnen Sie im Dialogfeld Eigenschaftenseiten die Dropdownliste Konfiguration, und klicken Sie auf Alle Konfigurationen. Wählen Sie Konfigurationseigenschaften>Allgemein aus, und öffnen Sie die Dropdownliste für die Eigenschaft Vom Build ausgeschlossen. Wählen Sie Ja aus, und klicken Sie dann auf Übernehmen, um die Änderungen zu speichern.

  3. Wenn Sie möchten, dass der Testcode in der Konfiguration „Debug UnitTests“ (Debuggen, Komponententests) enthalten ist, wählen Sie im Dialogfeld Eigenschaftenseiten in der Dropdownliste Konfiguration die Konfiguration Debug UnitTests (Debuggen, Komponententests) aus. Wählen Sie für die Eigenschaft Vom Build ausgeschlossen den Wert Nein aus, und klicken Sie auf OK aus, um die Änderungen zu speichern.

  4. Schließen Sie den Hauptcode aus Ihrer Konfiguration „Debug UnitTests“ (Debuggen, Komponententests) aus. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Datei, die Ihre main-Funktion enthält, und wählen Sie Eigenschaften aus. Öffnen Sie im Dialogfeld Eigenschaftenseiten die Dropdownliste Konfiguration, und klicken Sie auf Debug UnitTests (Debuggen, Komponententests). Wählen Sie Konfigurationseigenschaften>Allgemein aus, und öffnen Sie die Dropdownliste für die Eigenschaft Vom Build ausgeschlossen. Wählen Sie Ja aus, und klicken Sie dann auf OK, um die Änderungen zu speichern.

  5. Legen Sie die Projektmappenkonfiguration auf Debug UnitTests (Debuggen, Komponententests) fest, und erstellen Sie dann Ihr Projekt, damit der Test-Explorer die Methode ermitteln kann.

Solange der von Ihnen erstellte Konfigurationsname mit den Wörtern „Debug“ oder „Release“ beginnt, werden die entsprechenden Boost.Test-Bibliotheken automatisch erkannt.

In der Elementvorlage wird die Boost.Test-Variante mit einzelner Kopfzeile verwendet, aber Sie können den #include-Pfad ändern, sodass die Variante mit der eigenständigen Bibliothek genutzt wird. Weitere Informationen finden Sie unter Hinzufügen von include-Anweisungen.

Erstellen eines separaten Testprojekts

Oftmals ist es einfacher, ein separates Projekt für Ihre Tests zu verwenden. So müssen Sie keine besondere Testkonfiguration für das Projekt erstellen oder Testdateien aus Debug- und Releasebuilds ausschließen.

So erstellen Sie ein separates Testprojekt

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Knoten „Projektmappe“ und dann auf Hinzufügen>Neues Projekt.

  2. Wählen Sie im Dialogfeld Neues Projekt hinzufügen in den Filter-Dropdownlisten C++, Windows und Konsole aus. Wählen Sie die Vorlage Konsolen-App, und klicken Sie anschließend auf Weiter.

  3. Benennen Sie das Projekt, und klicken Sie auf Erstellen.

  4. Löschen Sie die main-Funktion aus der CPP-Datei.

  5. Wenn Sie die Boost.Test-Version mit einzelnen Headern oder dynamischen Bibliotheken verwenden, fahren Sie mit dem Abschnitt Hinzufügen von include-Anweisungen fort. In der Version mit den statischen Bibliotheken müssen Sie jedoch einige zusätzliche Konfigurationsschritte vornehmen:

    a. Entladen Sie die Projektdatei zunächst, damit Sie sie bearbeiten können. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektknoten, und wählen Sie Projekt entladen aus. Klicken Sie dann mit der rechten Maustaste auf den Projektknoten, und wählen Sie Bearbeiten <Name>.vcxproj.

    b. Fügen Sie der Eigenschaftengruppe Global auf folgende Weise zwei Zeilen hinzu:

    <PropertyGroup Label="Globals">
    ....
        <VcpkgTriplet>x86-windows-static</VcpkgTriplet>
        <VcpkgEnabled>true</VcpkgEnabled>
    </PropertyGroup>
    

    c. Speichern und schließen Sie die *.vcxproj-Datei, und laden Sie das Projekt anschließend neu.

    d. Klicken Sie mit der rechten Maustaste auf den Projektknoten, und wählen Sie Eigenschaften aus, um Eigenschaftenseiten zu öffnen.

    e. Erweitern Sie C/C++>Codegenerierung, und wählen Sie anschließend Laufzeitbibliothek aus. Wählen Sie /MTd aus, um die statische Laufzeitbibliothek zu debuggen, oder /MT, um die statische Laufzeitbibliothek freizugeben.

    f. Erweitern Sie Linker>System. Überprüfen Sie, ob SubSystem auf Konsole festgelegt ist.

    g. Klicken Sie auf OK, um die Eigenschaftenseiten zu schließen.

Hinzufügen von include-Anweisungen

  1. Fügen Sie Ihrer CPP-Testdatei alle erforderlichen #include-Anweisungen hinzu, um die Typen und Funktionen Ihres Programms für den Testcode anzuzeigen. Wenn Sie ein separates Testprojekt verwenden, befindet sich das Programm in der Regel auf einer gleichrangigen Ebene in der Ordnerhierarchie. Wenn Sie #include "../" eingeben, wird ein IntelliSense-Fenster angezeigt, und Sie können den vollständigen Pfad zur Headerdatei auswählen.

    Add #include directives

    Sie können die eigenständige Bibliothek wie folgt verwenden:

    #include <boost/test/unit_test.hpp>
    

    Oder Sie können die Version mit einem einzelnen Header wie folgt verwenden:

    #include <boost/test/included/unit_test.hpp>
    

    Definieren Sie anschließend BOOST_TEST_MODULE.

Das folgende Beispiel reicht aus, damit der Test im Test-Explorer sichtbar ist:

#define BOOST_TEST_MODULE MyTest
#include <boost/test/included/unit_test.hpp> //single-header
#include "../MyProgram/MyClass.h" // project being tested
#include <string>

BOOST_AUTO_TEST_CASE(my_boost_test)
{
    std::string expected_value = "Bill";

    // assume MyClass is defined in MyClass.h
    // and get_value() has public accessibility
    MyClass mc;
    BOOST_CHECK(expected_value == mc.get_value());
}

Schreiben und Ausführen von Tests

Nun können Sie Tests für Boost.Test schreiben und ausführen. Weitere Informationen zu den Test-Makros finden Sie in der Dokumentation zur Boost.Test-Bibliothek. Weitere Informationen zum Ermitteln, Ausführen und Gruppieren Ihrer Tests mithilfe des Test-Explorers finden Sie unter Ausführen von Komponententests mit dem Test-Explorer.