Ich denke, das Konzept von Pythons Doc-Tests ist brillant und als C ++ - Programmierer in einem Echtzeit-Shop Ich bin ziemlich eifersüchtig. Wir haben grundsätzlich keine Komponententestfähigkeit, was ein ernsthaftes Hindernis darstellt. Ich habe C ++ Unit usw. gesehen, aber gibt es irgendetwas, das Testfälle aus Kommentaren wie Pythons Doc-Tests extrahieren kann, anstatt sie direkt in den Code zu schreiben?
Vielleicht finden Sie das nützlich. Ich habe angefangen, dies zu entwickeln, nachdem ich das in meinem eigenen Code brauchte.
Es ist ein Python-Skript, das Ihre Kommentare durchläuft und Tests extrahiert und Testdateien generiert.
Noch in Entwicklung und Tests. Schätzen Sie jedes Feedback.
Prost Sri
Ich habe gerade doctest veröffentlicht - Das leichteste funktionsreiche C ++ - Header-Testframework.
Es ist nicht zum Schreiben von Tests in Kommentare gedacht - sondern zum Schreiben von Tests direkt in den Produktionscode. Es passt nicht perfekt zu Ihren Anforderungen, aber es ist immer noch die beste Option in C ++ ohne Vorverarbeitungsschritte
Ich habe gerade Doctest angeschaut, es ist wirklich brillant. So ist die Benutzerfreundlichkeit der Python-Sprache.
Für C ++ werden Sie jedoch wahrscheinlich ein solches Werkzeug nicht finden.
Wenn einer der Tests fehlschlägt, möchten Sie vielleicht debuggen, was passiert. Es wäre nicht so einfach, die Quelle des Testfalls aus Kommentaren zu generieren. Stattdessen haben Sie in den vorhandenen Unit-Test-Frameworks für C ++ die Quelle der Tests mit einer speziellen Syntax, die kompiliert und leicht zu debuggen ist. Auch die Generierung der Quelle aus Kommentaren wäre ein weiterer zusätzlicher (Vor-) Kompilierungsschritt, der das Leben nur erschweren würde.
Sie sollten akzeptieren, dass das Codieren in C ++ nicht so schnell ist wie in Python, daher ist das Komponententesten etwas schwieriger. Auf der anderen Seite haben Sie mehr Werkzeuge, Sie können zum Beispiel statische Behauptungen für Typbeziehungen setzen, was in Python unmöglich ist.
Ich denke also, das Analogon des Python-Doktests für C ++ hätte im Vergleich zu den bestehenden Tools so viele Nachteile, dass niemand damit begann, es zu implementieren.
Wenn Sie wirklich glauben, dass es besser sein kann als die bestehenden Tools, geben Sie bitte einige Beispiele an. Ich glaube kaum, dass es reale Fälle gibt, in denen es brauchbarer sein kann.
Ich dachte an etwas wie die Erzeugung von CxxTest Dateien aus Kommentaren. Ich habe diesen Rahmen nicht benutzt, aber er sieht vielversprechend aus. In ihrem Handbuch sieht eine Komponententestdatei ungefähr so aus:
%Vor%Mein Vorschlag wäre ein Parser, der den Inhalt dieser testX-Funktionen aus Kommentaren extrahiert, anstatt die ganze Sache schreiben zu müssen. Zum Beispiel (und ich fange nur die Kommentarsyntax hier, es könnte eine sauberere Art sein, es zu schreiben):
%Vor%Ich bin mir nicht sicher, wie die leistungsstärkeren Aspekte von CxxTest implementiert werden, wie das Erstellen von Fixtures, aber so etwas könnte die Zusammengehörigkeit von Python-Docstrings und -Doctests in der C ++ - Welt bieten.
Das Test-Framework, das mit Fost geliefert wird, behandelt etwas ziemlich ähnliches. Die Tests werden nicht in die Dokumentation eingebettet, können aber neben dem Code stehen, den sie testen. In der Struktur sehen die Tests dem cxxtest-Code sehr ähnlich.
%Vor%All dieses Los wird mit den eingebetteten Tests kompiliert (Sie könnten sie aus dem Build über eine # define entfernen - nicht implementiert, aber einfach zu tun). Die Tests werden dann durch ein separates Programm ausgeführt, das die erstellte .DLL oder .so lädt, die Tests findet und ausführt.
Wir haben es nicht ausprobiert, aber es sollte mit statischen Bibliotheken funktionieren und Tests, die in .EXE-Dateien unter Windows gefunden werden, dynamisch laden und ausführen, aber ich bin weniger sicher, ob dies auf Linux oder Macs möglich ist.
Ich kenne alte Tricks, um Dinge in echte Code-Kommentare zu schreiben (IIRC, das ist Teil von Programmierungspraxis ). Es kann jedoch einfacher sein, die Komponententests einfach in #ifdef
blocks zu platzieren. Sie können den Präprozessor normalerweise für solche Dinge selbst ausführen.
Andererseits ist mir ein Projekt bekannt, das Perl als Super verwendet -dünner Präprozessor.