Entdecken Sie das TÜV-zertifizierte GoogleTest mit Agentic AI für C/C++-Tests!
Details ansehen »
Zum Abschnitt springen
Zurück zu den Blog-ErgebnissenParasoft-Blog
Haben Sie sich jemals gefragt, wie Sie Parasoft C/C++test mit CMake für Komponententests verwenden können? In diesem Beitrag erfahren Sie, wie.
Zum Abschnitt springen
Mit der Veröffentlichung von C/C++test 2020.1 wurde die Möglichkeit eingeführt, C/C++test in CMake für statische Analysen und Unit-Tests zu integrieren. Dieser Beitrag beschreibt die Verwendung von Parasoft C/C++test in CMake-basierten Projekten für Unit-Tests.
Unit-Tests lassen sich komplizierter in den Entwicklungsprozess integrieren als statische Analysen. Am Ende muss die ausführbare Binärdatei erstellt werden. Dies ist besonders problematisch bei großen und komplexen Projekten, die aus mehreren Bibliotheken und ausführbaren Dateien bestehen.
Die JSON-Datei mit den Kompilierungsinformationen, die wir für die statische Analyse verwenden, reicht nicht aus. Es enthält keine wichtigen Informationen zur Struktur des Projekts - welche Dateien in welchen Binärdateien enthalten sind und welche gemeinsam getestet werden sollten.
Um die Integration von Parasoft C/C++test-Unit-Tests in CMake-basierte Projekte zu vereinfachen, führt die Version 2020.1 eine CMake-Erweiterung ein, mit der Unit-Test-Ziele für C/C++test definiert werden können . Diese Ziele generieren automatisch die C/C++test-Projektdateien, die zum Erstellen, Ausführen und Warten von Unit-Tests verwendet werden können.
Mit dieser Erweiterung sollen Benutzer in die Lage versetzt werden, die gesamte Infrastruktur, die für das Testen von Parasoft C / C ++ - Testeinheiten erforderlich ist, zusammen mit ihren regulären Zielen in den CMake-Konfigurationsdateien zu definieren.
Sehen wir uns an, wie es anhand eines Unit-Test-Beispiels mit dem Eclipse-basierten Tool C/C++test Professional funktioniert, das über eine umfangreiche Benutzeroberfläche verfügt. Laden Sie die Version 2020.1 herunter und installieren Sie sie, falls Sie dies noch nicht getan haben.
Im Hauptinstallationsverzeichnis von C / C ++ test Professional finden Sie die CMake-Erweiterung mit dem zugehörigen Beispiel. Siehe folgendes Verzeichnis: Integration / cmake.
Für unsere Experimente empfehle ich, den Integrations- / cmake-Ordner aus der Installation an Ihren bevorzugten Speicherort zu kopieren. Die Struktur des Beispiels ist unten dargestellt:
Der App-Ordner enthält das ausführbare Ziel. Der Modulordner mit seinen drei Unterordnern (mod1, mod2 und mod3) enthält statische Bibliotheken, die zum Verknüpfen mit der ausführbaren Datei verwendet werden. Der cmake-Ordner enthält außerdem die C/C++-Testerweiterung für CMake. Sie können diesen Ordner in Ihr reales Projekt kopieren, um diese Erweiterung zu verwenden.
Diese vereinfachte Struktur zeichnet ein Bild von typischen Herausforderungsteams, die versuchen, Unit-Test-Gesicht zu implementieren: So teilen Sie das gesamte Projekt in testbare Blöcke auf, die Gruppen von Dateien darstellen, die logisch zusammengehören.
In den meisten Fällen möchten Entwickler keine Komponententests für eine Blob-Binärdatei ausführen, die durch Kompilieren aller Dateien aus einem gesamten Projekt erstellt wurde. Benutzer werden höchstwahrscheinlich daran interessiert sein, die Testfälle für dieselben binären Ziele (ausführbare Dateien und Bibliotheken) hinzuzufügen, die sie im Projekt definiert haben.
Bevor wir die Details der Konfigurationssyntax diskutieren, wollen wir anhand des bereitgestellten Beispiels sehen, wie sie funktioniert.
1. Erstellen Sie im obersten Verzeichnis, in dem sich der Anwendungsordner befindet, ein Build-Verzeichnis, wechseln Sie in dieses Verzeichnis und rufen Sie die Generierung der Build-Skripte auf, wie unten gezeigt:
2. Nachdem CMake die Generierung der Build-Skripte (Makefiles) abgeschlossen hat, rufen Sie make auf, um das Beispielprojekt zu erstellen:
3. Starten Sie C/C++test professional (die ausführbare Datei „cpptest“ im Installationsordner). Wählen Sie einen leeren Arbeitsbereich aus, klicken Sie auf „Datei → Importieren… → Vorhandene Projekte in Arbeitsbereich“ und wählen Sie als „Stammverzeichnis“ den Ordner aus, in den Sie das Beispiel kopiert haben. Der Assistent durchsucht den ausgewählten Ordner rekursiv und findet alle automatisch generierten Projekte. Wenn Sie eine ähnliche Ansicht wie unten sehen, klicken Sie auf „Fertigstellen“.
Eclipse importiert alle Projekte und Sie haben einen neuen Arbeitsbereich für Ihre Unit-Tests bereit. Sie müssen nichts weiter tun, um die Testfälle hinzuzufügen und auszuführen und um die Codeabdeckung zu verbessern.
4. Wählen Sie im Projektnavigator alle drei Projekte aus, klicken Sie mit der rechten Maustaste und verwenden Sie die Testkonfiguration „Parasoft -> Testen mit -> Integriert -> Unit-Tests -> Unit-Tests generieren“, um die Testfälle automatisch zu generieren. Sobald die Tests generiert wurden, führen Sie die Konfiguration „Unit-Tests ausführen“ am selben Ort aus.
Mit diesen einfachen vier Schritten haben Sie die Projektinfrastruktur für Unit-Tests vorbereitet. Das Team ist nun bereit, die Testfälle zu knirschen.
Zusätzlich zu den regulären Build-Zielen enthalten die Dateien CMakeLists.txt Unit-Test-Ziele. Beim Generieren der Build-Skripte mit cmake werden auch automatisch C / C ++ - Testprojektdateien generiert. Später während des Erstellungsprozesses werden automatisch zusätzliche Erstellungsdatendateien generiert, die für C / C ++ - Testprojekte erforderlich sind.
Alles, was zum Definieren der Struktur der Unit-Test-Projekte erforderlich ist, befindet sich in den Dateien CMakeLists.txt. Das Team muss keine zusätzlichen Konfigurationsdateien verwalten. Alles ist schön und sauber. Das Projekt kann ausgecheckt werden, Build-Skripte und C / C ++ - Testprojekte können generiert werden, Tests können zusammen mit dem Quellcode hinzugefügt und eingecheckt werden, und vollständige Tests können im CI durchgeführt werden.
Schauen wir uns die C / C ++ - Test-CMake-Erweiterung genauer an und wie sie bei der Definition der Infrastruktur für Testprojekte hilft. Öffnen Sie die Datei modules / mod1 / CMakeLists.txt. Sie sollten so etwas wie unten sehen:
In den ersten sechs Zeilen sehen Sie die reguläre Zieldefinition. Hier definieren wir ein einfaches Bibliotheksziel mit einer Quelldatei mod1.cpp und einem Include-Dateiverzeichnis. Dies sehen Sie normalerweise in Ihren CMake-Projekten.
In Zeile 11 haben wir jedoch eine neue CMake-Funktion, die mit der C / C ++ - Testerweiterung bereitgestellt wird. Mit dieser Funktion können Sie das Unit-Test-Ziel definieren, das alle erforderlichen C / C ++ - Testprojektdateien generiert. Die vollständige Beschreibung dieser Funktion finden Sie in den Integrationen / cmake / README.md. In diesem speziellen Beispiel wird Folgendes ausgeführt:
Diese einfache Zieldefinition reicht aus, um ein Unit-Test-Projekt für den Parasoft C / C ++ - Test zu generieren. Projektdateien werden am Speicherort der Datei CMakeLists.txt generiert, was wahrscheinlich am bequemsten ist. Wenn Sie möchten, können Sie die Projektdateien außerhalb des Quellbaums generieren und Probleme beim Zusammenführen vermeiden. Dies wird in app / CMakeLists.txt angezeigt:
Weitere Informationen finden Sie in den folgenden Dateien unter Verzeichnis / integrations / cmake:
Hier sind die wichtigen Punkte zur Erweiterung.