Schreiben von Komponententests für C/C++ in Visual StudioWrite unit tests for C/C++ in Visual Studio

Sie können C++-Komponententests genauso wie in allen anderen Sprachen über das Fenster Test-Explorer schreiben und ausführen.You can write and run your C++ unit tests by using the Test Explorer window, just like for other languages. Weitere Informationen zur Verwendung des Test-Explorers finden Sie unter Ausführen von Komponententests mit dem Test-Explorer.For more information about using Test Explorer, see Run unit tests with Test Explorer.

Note

Einige Funktionen wie Live Unit Testing, Tests der programmierten UI und IntelliTest werden für C++ nicht unterstützt.Some features such as Live Unit Testing, Coded UI Tests and IntelliTest are not supported for C++.

Visual Studio umfasst diese C++-Testframeworks ohne zusätzliche erforderliche Downloads:Visual Studio includes these C++ test frameworks with no additional downloads required:

  • Microsoft-Komponententest-Framework für C++Microsoft Unit Testing Framework for C++
  • Google TestGoogle Test
  • Boost.TestBoost.Test
  • CTestCTest

Sie können Ihren eigenen Testadapter sowohl für installierte Frameworks als auch für ein beliebiges anderes Framework zur Verwendung in Visual Studio schreiben.In addition to the installed frameworks, you can write your own test adapter for whatever framework you would like to use within Visual Studio. Ein Testadapter kann Komponententests in das Fenster Test-Explorer integrieren.A test adapter can integrate unit tests with the Test Explorer window. Im Visual Studio Marketplace sind einige Adapter von Drittanbietern verfügbar.Several third-party adapters are available on the Visual Studio Marketplace. Weitere Informationen finden Sie unter Installieren von Frameworks für Komponententests von Drittanbietern.For more information, see Install third-party unit test frameworks.

Visual Studio 2017 und höher (Professional und Enterprise)Visual Studio 2017 and later (Professional and Enterprise)

C++-Komponententestprojekte unterstützen CodeLens.C++ unit test projects support CodeLens.

Visual Studio 2017 und höher (alle Editionen)Visual Studio 2017 and later (all editions)

  • Der Google Test-Adapter ist als Standardkomponente in der Workload Desktop Development mit C++ enthalten.Google Test Adapter is included as a default component of the Desktop development with C++ workload. Er verfügt über eine Projektvorlage, die Sie über das Kontextmenü Neues Projekt hinzufügen auf dem Projektmappenknoten im Projektmappen-Explorer zu einer Projektmappe hinzufügen können, sowie Optionen, die Sie über Extras > Optionen konfigurieren können.It has a project template that you can add to a solution via the Add New Project right-click menu on the solution node in Solution Explorer, and options you can configure via Tools > Options. Weitere Informationen finden Sie unter Vorgehensweise: Verwenden von Google Test in Visual Studio.For more information, see How to: Use Google Test in Visual Studio.

  • Boost.Test ist als Standardkomponente in der Workload Desktop Development mit C++ enthalten.Boost.Test is included as a default component of the Desktop development with C++ workload. Diese Komponente ist zwar in Test-Explorer integriert, jedoch gibt es derzeit noch keine Projektvorlage. Darum müssen Sie sie manuell konfigurieren.It is integrated with Test Explorer but currently does not have project template, therefore it must be manually configured. Weitere Informationen finden Sie unter Vorgehensweise: Verwenden von Boost.Test in Visual Studio.For more information, see How to: Use Boost.Test in Visual Studio.

  • Die Komponente C++ CMake tools, die Teil der Workload Desktop Development mit C++ ist, umfasst die Unterstützung von CTest.CTest support is included with the C++ CMake tools component, which is part of the Desktop development with C++ workload. Allerdings ist CTest noch nicht vollständig in den Test-Explorer integriert.However, CTest is not yet fully integrated with Test Explorer. Weitere Informationen finden Sie unter Vorgehensweise: Verwenden von CTest in Visual Studio.For more information, see How to: Use CTest in Visual Studio.

Visual Studio 2015 und frühere VersionenVisual Studio 2015 and earlier

Sie können die Erweiterungen für den Google Test-Adapter und den Boost.Test-Adapter in Visual Studio Marketplace unter Testadapter für Boost.Test und Testadapter für Google Test herunterladen.You can download the Google Test adapter and Boost.Test Adapter extensions on the Visual Studio Marketplace at Test adapter for Boost.Test and Test adapter for Google Test.

Grundlegender TestworkflowBasic test workflow

Im folgenden Abschnitt werden die grundlegenden ersten Schritte für C++-Komponententests dargestellt.The following sections show the basic steps to get you started with C++ unit testing. Die Basiskonfigurationen für die Microsoft- und Google Test-Frameworks sind sehr ähnlich.The basic configuration is very similar for the Microsoft and Google Test frameworks. Für Boost.Test müssen Sie ein Testprojekt manuell erstellen.Boost.Test requires that you manually create a test project.

Erstellen eines Testprojekts in Visual Studio 2019Create a test project in Visual Studio 2019

Sie definieren Tests für mindestens ein Testprojekt und führen diese aus. Das Testprojekt (bzw. die Testprojekte) muss (bzw. müssen) in derselben Projektmappe gespeichert sein wie der Code, den Sie testen möchten.You define and run tests inside one or more test projects that are in the same solution as the code you want to test. Klicken Sie mit der rechten Maustaste im Projektmappen-Explorer auf den Projektmappenknoten, und wählen Sie anschließend Hinzufügen > Neues Projekt aus, um ein neues Testprojekt hinzuzufügen.To add a new test project to an existing solution, right-click on the Solution node in Solution Explorer and choose Add > New Project. Legen Sie Sprache auf C++ fest, und geben Sie „test“ in das Suchfeld ein.Set Language to C++ and type "test" into the search box. In der folgenden Abbildung werden Testprojekte dargestellt, auf die Sie zugreifen können, wenn die Workloads Desktopentwicklung mit C++ und Entwicklung für die universelle Windows-Plattform installiert sind:The following illustration shows the test projects that are available when the Desktop Development with C++ and the UWP Development workload are installed:

C++-Testprojekte in Visual Studio 2019

Erstellen eines Testprojekts in Visual Studio 2017Create a test project in Visual Studio 2017

Sie definieren Tests für mindestens ein Testprojekt und führen diese aus. Das Testprojekt (bzw. die Testprojekte) muss (bzw. müssen) in derselben Projektmappe gespeichert sein wie der Code, den Sie testen möchten.You define and run tests inside one or more test projects that are in the same solution as the code you want to test. Klicken Sie mit der rechten Maustaste im Projektmappen-Explorer auf den Projektmappenknoten, und wählen Sie anschließend Hinzufügen > Neues Projekt aus, um ein neues Testprojekt hinzuzufügen.To add a new test project to an existing solution, right-click on the Solution node in Solution Explorer and choose Add > New Project. Klicken sie dann im linken Bereich auf Visual C++ Test und anschließend auf einen der Projekttypen im mittleren Bereich.Then in the left pane choose Visual C++ Test and choose one of the project types from the center pane. In der folgenden Abbildung werden Testprojekte dargestellt, auf die Sie zugreifen können, wenn die Workload Desktop Development mit C++ installiert ist:The following illustration shows the test projects that are available when the Desktop Development with C++ workload is installed:

C++-Testprojekte

Erstellen von Verweisen auf andere Projekte in der ProjektmappeCreate references to other projects in the solution

Fügen Sie einen Verweis auf das Projekt in Ihrem Testprojekt hinzu, damit der Testcode auf die Funktionen in dem zu testenden Projekt zugreifen kann.To enable your test code to access the functions in the project to be tested, add a reference to the project in your test project. Klicken Sie im Projektmappen-Explorer zunächst mit der rechten Maustaste auf den Knoten für das Testprojekt, und wählen Sie anschließend Hinzufügen > Verweis aus.Right-click on the test project node in Solution Explorer and choose Add > Reference. Wählen Sie dann in dem Dialogfeld das Projekt bzw. die Projekte aus, das bzw. die Sie testen möchten.Then in the dialog choose the project(s) you want to test.

Verweis hinzufügen

Wenn der Testcode die Funktionen, die Sie testen möchten, nicht exportiert, können Sie die OBJ- oder LIB-Ausgabedateien zu den Abhängigkeiten des Testprojekts hinzufügen.If the test code doesn't export the functions that you want to test, you can add the output .obj or .lib files to the dependencies of the test project. Weitere Informationen finden Sie unter So verknüpfen Sie die Tests mit den Objekt- oder Bibliotheksdateien.See To link the tests to the object or library files.

Hinzufügen von #include-Direktiven für HeaderdateienAdd #include directives for header files

Fügen Sie als Nächstes in der CPP-Datei in Ihrem Komponententest eine #include-Direktive für sämtliche Headerdateien hinzu, die die Typen und Funktionen deklarieren, die Sie testen möchten.Next, in your unit test .cpp file, add an #include directive for any header files that declare the types and functions you want to test. Geben Sie #include " ein, um IntelliSense zu aktivieren, damit es Ihnen bei der Auswahl hilft.Type #include " and then IntelliSense will activate to help you choose. Wiederholen Sie diesen Vorgang für alle zusätzlichen Header.Repeat for any additional headers.

Hinzufügen von include-Anweisungen

Um nicht in jede include-Anweisung in der Quelldatei den vollständigen Pfad eingeben zu müssen, können Sie die erforderlichen Ordner unter Projekt > Eigenschaften > C/C++ > Allgemein > Zusätzliche Includeverzeichnisse hinzufügen.To avoid having to type the full path in each include statement in the source file, you can add the required folders in Project > Properties > C/C++ > General > Additional Include Directories.

Schreiben von TestmethodenWrite test methods

Note

In diesem Abschnitt wird die Syntax von Microsoft Unittest-Frameworks für C/C++ dargestellt.This section shows syntax for the Microsoft Unit Testing Framework for C/C++. Die entsprechende Dokumentation finden Sie hier: Referenz für die API „Microsoft.VisualStudio.TestTools.CppUnitTestFramework“It is documented here: Microsoft.VisualStudio.TestTools.CppUnitTestFramework API reference. Die Dokumentation zu Google Test finden Sie unter Google Test Primer (Einführung in Google Test).For Google Test documentation, see Google Test primer. Die Dokumentation zu Boost.Test finden Sie unter Boost Test Library: The Unit Test Framework (Boost Test-Bibliothek: Das Framework für Komponententests).For Boost.Test, see Boost Test library: The unit test framework.

Die CPP-Datei in Ihrem Testprojekt verfügt über eine Stubklasse und -methode, die als Beispiel für das Schreiben von Testcode definiert sind.The .cpp file in your test project has a stub class and method defined for you as an example of how to write test code. Beachten Sie, dass die Signaturen die Makros TEST_CLASS und TEST_METHOD verwenden, wodurch Sie die Methoden über das Fenster Test-Explorer finden können.Note that the signatures use the TEST_CLASS and TEST_METHOD macros, which make the methods discoverable from the Test Explorer window.

Hinzufügen von include-Anweisungen

TEST_CLASS und TEST_METHOD sind Teil des nativen Microsoft-Testframeworks.TEST_CLASS and TEST_METHOD are part of the Microsoft Native Test Framework. Der Test-Explorer erkennt Testmethoden in anderen unterstützten Frameworks auf dieselbe Weise.Test Explorer discovers test methods in other supported frameworks in a similar way.

Das Makro TEST_METHOD gibt „Void“ zurück.A TEST_METHOD returns void. Verwenden Sie die statische Methode in der Assert-Klasse, um die tatsächlichen Ergebnisse im Vergleich zu den erwarteten Ergebnissen zu vergleichen und um ein Testergebnis zu erzeugen.To produce a test result, use the static methods in the Assert class to test actual results against what is expected. Im folgenden Beispiel wird angenommen, dass MyClass über einen Konstruktor verfügt, der einen std::string akzeptiert.In the following example, assume MyClass has a constructor that takes a std::string. Es kann getestet werden, ob der Konstruktor die Klasse wie erwartet initialisiert:We can test that the constructor initializes the class as expected like so:

TEST_METHOD(TestClassInit)
{
    std::string name = "Bill";
    MyClass mc(name);
    Assert::AreEqual(name, mc.GetName());
}

Im vorstehenden Beispiel bestimmt das Ergebnis des Aufrufs Assert::AreEqual, ob der Test erfolgreich ausgeführt werden kann oder fehlschlägt.In the previous example, the result of the Assert::AreEqual call determines whether the test passes or fails. Die Assert-Klasse enthält einige andere Methoden zum Vergleichen der erwarteten Ergebnisse mit den tatsächlichen Ergebnissen.The Assert class contains many other methods for comparing expected vs. actual results.

Sie können der Testmethode Merkmale hinzufügen, um Testbesitzer, die Priorität und andere Informationen anzugeben.You can add traits to test methods to specify test owners, priority and other information. Sie können diese Werte verwenden, um Tests im Test-Explorer zu sortieren und in Gruppen zu unterteilen.You can then use these values to sort and group tests in Test Explorer. Weitere Informationen finden Sie unter Run unit tests with Test Explorer (Ausführen von Komponententests mit dem Test-Explorer).For more information, see Run unit tests with Test Explorer.

Tests ausführenRun the tests

  1. Klicken Sie im Menü Test auf Windows > Test-Explorer.On the Test menu, choose Windows > Test Explorer. In der folgenden Abbildung wird ein Testprojekt dargestellt, für das noch keine Tests ausgeführt wurden.The following illustration shows a test project whose tests have not yet run.

    Test-Explorer vor dem Ausführen von Tests

    Note

    Die CTest-Integration für den Test-Explorer ist noch nicht verfügbar.CTest integration with Test Explorer is not yet available. Führen Sie CTest-Tests über das Hauptmenü von CMake aus.Run CTest tests from the CMake main menu.

  2. Wenn Ihre Tests nicht im Fenster angezeigt werden, erstellen Sie das Testprojekt, indem Sie mit der rechten Maustaste auf dessen Knoten im Projektmappen-Explorer klicken und Erstellen oder Neu erstellen auswählen.If all your tests are not visible in the window, build the test project by right-clicking its node in Solution Explorer and choosing Build or Rebuild.

  3. Klicken Sie im Test-Explorer auf Alle ausführen, oder wählen Sie die Tests aus, die Sie ausführen möchten.In Test Explorer, choose Run All, or select the specific tests you want to run. Klicken Sie für weitere Optionen, einschließlich des Ausführens im Debugmodus mit aktivierten Breakpoints, mit der rechten Maustaste auf einen Test.Right-click on a test for other options, including running it in debug mode with breakpoints enabled. Wenn alle Tests ausgeführt wurden, wird in dem Fenster dargestellt, welche Tests erfolgreich waren und welche fehlgeschlagen sind:After running all the tests, the window shows which tests passed and which ones failed:

Test-Explorer nach dem Ausführen von Tests

Bei fehlgeschlagenen Tests werden in einer Meldung Details angezeigt, die Ihnen dabei helfen sollen, den Grund für das Problem zu finden.For failed tests, the message offers details that help to diagnose the cause. Sie können mit der rechten Maustaste erst auf den fehlgeschlagenen Test klicken und dann auf Ausgewählte Tests debuggen, um die Funktion, bei der der Fehler aufgetreten ist, genau zu überprüfen.You can right-click on the failing test and choose Debug Selected Tests to step through the function where the failure occurred.

Weitere Informationen zur Verwendung des Test-Explorers finden Sie unter Ausführen von Komponententests mit dem Test-Explorer.For more information about using Test Explorer, see Run unit tests with Test Explorer.

Bewährte Methoden im Zusammenhang mit Komponententests finden Sie unter Grundlagen zum Komponententest.For best practices related to unit testing, see Unit test basics

Verwenden von CodeLensUse CodeLens

Visual Studio 2017 und höher (Editionen Professional und Enterprise)Visual Studio 2017 and later (Professional and Enterprise editions)

Mit CodeLens können Sie sich den Status eines Komponententests ansehen, ohne dazu den Code-Editor verlassen zu müssen.CodeLens enables you to quickly see the status of a unit test without leaving the code editor. Sie können CodeLens für ein C++-Komponententestprojekt mit jeder der folgenden Möglichkeiten initialisieren:You can initialize CodeLens for a C++ unit test project in any of these ways:

  • Bearbeiten und erstellen Sie Ihr Testprojekt oder Ihre -projektmappe.Edit and build your test project or solution.
  • Erstellen Sie Ihr Projekt oder die Projektmappe erneut.Rebuild your project or solution.
  • Führen Sie Tests im Fenster Test-Explorer aus.Run test(s) from the Test Explorer window.

Nachdem CodeLens initialisiert wurde, werden Statussymbole zu jedem Komponententest angezeigt.After CodeLens is initialized, you can see test status icons above each unit test.

C++ CodeLens-Symbole

Klicken Sie auf das Symbol, um weitere Informationen zu erhalten oder den Komponententest auszuführen oder zu debuggen:Click on the icon for more information, or to run or debug the unit test:

Ausführen und Debuggen von C++ CodeLens

Siehe auchSee also