GoogleTest vs CppUnit: Die Fakten

70

Bei der Festlegung unseres C ++ - Unit-Test-Frameworks für die nächsten Jahre haben wir GoogleTest und CppUnit in die engere Wahl gezogen . Ich habe einige Erfahrungen mit beiden und meine große Vorliebe ist GoogleTest. Um meinen Chef zu überzeugen, brauche ich einige Fakten, also habe ich im Internet gelesen, einschließlich der Handbücher, Wiki-Seiten und einiger Quellen. Ich habe eine Liste mit GoogleTest-Vorteilen und einen einzelnen CppUnit-Vorteil (grafische Testläufer) erstellt. Hier sind sie nach wahrgenommener Nützlichkeit geordnet :

  • INSTANTIATE_TEST_CASE_P, um einen Testfall mit einem beliebigen Parametersatz zu instanziieren, einschließlich kartesischer Produkte
  • FRIEND_TEST zum Testen privater Klassenmitglieder (für den gesamten Legacy-Code)
  • Asserts in Haltepunkte verwandeln
  • nicht tödliche Behauptungen
  • "out of the box" Googlemock-Integration
  • automatische Testerkennung, keine Aufzählung erforderlich
  • Tests können deaktiviert und aktiviert werden
  • Die auszuführenden Tests können anhand von Namensmustern ausgewählt werden
  • wert- / typparametrierte Tests
  • benutzerdefinierte Prädikat-Asserts
  • Todestests
  • viel reichhaltiger Satz von Behauptungen
  • Typ behauptet
  • Behauptung auf Unterprogrammen
  • Zusätzliche Debug-Informationen können zu Asserts mit << hinzugefügt werden
  • RecordProperty gibt den letzten Wert der Eigenschaft an die XML-Ausgabe aus
  • SCOPED_TRACE hilft dabei, den Kontext eines Assertionsfehlers zu verstehen, der aus einer Subroutine oder Schleife stammt.
  • Die XML-Ausgabe von xUnit kann von Jenkins sofort ohne dazwischen liegende XSLT-Transformation angezeigt werden
  • unterstützt benutzerdefinierte Druckertypen
  • Zeitaufwand für die Testanzeige (Ich vermute, dass dies auch mit CppUnit möglich ist, aber ich habe es noch nicht herausgefunden)
  • Test Event Listener API (benutzerdefinierte Plug-Ins)
  • Test mischen
  • Keine Ausnahmen und RTTI

Bin ich zu Recht davon ausgegangen, dass alle oben genannten Funktionen von CppUnit nicht unterstützt werden? Gibt es eine nützliche GoogleTest-Funktion , die in CppUnit nicht verfügbar ist ? Ich vermisse sie.

Und zu guter Letzt: Gibt es nette CppUnit-Funktionen, die GoogleTest fehlen ?

Vielen Dank!

EstuansInterius
quelle
5
Einige der Antworten zum Vergleich von C ++ - Unit-Test-Frameworks beziehen sich speziell auf GoogleTest-Funktionen.
Greg Hewgill
2
Vor ein paar Jahren habe ich eine ähnliche Umfrage durchgeführt, GoogleTest gab es damals noch nicht. Ich entschied mich für CXXTest, das einen Mechanismus hatte, um die Testfälle durch einen Pre-Parsing-Schritt mit Perl aufzulisten. Das war CppTest weit überlegen. Trotzdem weiß ich nichts über GoogleTest.
Wolfram Arnold
1
Ein grafischer Testläufer ist ein Vorteil? Normalerweise möchten Sie etwas, das einfach automatisiert werden kann, da Sie durch Automatisierung einfacher und häufiger Test-Feedback erhalten.
Ben Voigt

Antworten:

7

Wenn Sie eine ältere Version des gcc-Compilers verwenden oder wenn Ihr zu testender Code unter vxWorks (oder VxSim) ausgeführt wird, haben Sie mit cppUnit möglicherweise eine bessere Chance als mit dem Googletest-Framework.

Ein weiteres Merkmal des Googletest-Frameworks ist die Verfügbarkeit von 3 verschiedenen Ebenen für das Einrichten / Herunterfahren:

  • pro Programm
  • pro Testfall (oder Testgruppe)
  • pro einzelnen Testinstanzen

Ich bin mir nicht sicher, ob dies in cppUnit unterstützt wird, aber dies kann sehr praktisch sein, insbesondere bei Legacy-Systemen.

Außerdem gibt es ein Googletest-Plugin für Eclipse CDT.

Ratkok
quelle
6

Wenn Sie sich xUnit ++ nicht angesehen haben , habe ich es speziell gemacht, weil ich mit dem, was verfügbar war (einschließlich gtest), unzufrieden war. Der größte Teil Ihrer Liste wird unterstützt, und wenn nicht, wäre ich wahrscheinlich bereit, sie hinzuzufügen, wenn es sich um ein "Muss" handelt.

Moswald
quelle
Können Sie es unter einer zulässigen Open Source-Lizenz veröffentlichen? Wie Apache 2.0 oder MIT-Lizenz?
Sachin Joseph
Ich erinnere mich ehrlich gesagt nicht, welche Lizenz verwendet wird, aber ich denke, es ist die MIT-Lizenz.
Moswald
Vielen Dank, aber obwohl der Text derselbe ist, sagt License.txt nicht, dass es sich um die MIT-Lizenz handelt. Würde es Ihnen etwas ausmachen, es hinzuzufügen (wenn Sie natürlich Zeit haben), wenn es in Ordnung ist? Gefällt Ihnen opensource.org/licenses/MIT ? Ich denke, es würde mehr Menschen erlauben, dieses wunderbare Framework zu nutzen und auszuprobieren :-)
Sachin Joseph
1
Die Wikipedia-Seite en.wikipedia.org/wiki/List_of_unit_testing_frameworks sagt auch nicht, dass xUnit ++ unter der MIT-Lizenz veröffentlicht wird, wahrscheinlich weil es nirgendwo in Ihrem Bitbucket-Repo angegeben ist (glaube ich) :-)
Sachin Joseph
toter Link? jdb hat den github hochgeladen?
Bild vor