Welches Unittest-Framework für C++
-
Hallo zusammen
welches Framework nehmt ihr für Unittests in C++ für Konsolenapplikationen?
Ich suche aktuell eines, was ich im Team etablieren kann. Derzeit teste ich mit einem selbstgebauten framework, was im Grunde genauso mit irgendwelchen Makros ala "REQUIRE" oder "ASSERT" oder "EXPECT_EQ" arbeitet, wie eigentlich alle anderen Frameworks auch.
Was mich an den meisten Frameworks stört, ist dass man nur selten Kommentare für einen TEST angeben kann. Ich will eigentlich etwas mehr als nur eine 0 oder 1 am Ende des Unittests, falls sich das Unittest-Result doch mal ein Prüfer durchliest...
Was würdet ihr empfehlen? googletest?
-
wiki hat ne lange liste: https://en.wikipedia.org/wiki/List_of_unit_testing_frameworks#C.2B.2B
ich selber habe noch nichts davon benutzt, nur junit, aber das gibt es nicht für c++
-
@Bushmaster sagte in Welches Unittest-Framework für C++:
wiki hat ne lange liste: https://en.wikipedia.org/wiki/List_of_unit_testing_frameworks#C.2B.2B
ich selber habe noch nichts davon benutzt, nur junit, aber das gibt es nicht für c++
Doch gibt es. Nennt sich "cppunit".
Mir gehts aber um Erfahrungen, Pros/Contras.. .Die Liste habe ich schon selber gefunden
-
Ich verwende Google test. Das kann sehr viel, ist open source und gut dokumentiert. Außerdem unterstützt Visual Studio das inzwischen von Hause aus, so dass man da auch eine gute IDE Integration hat.
Der Nachteil ist, sofern man es als Nachteil auffassen möchte, es basiert auf Macros. Das ist aber bei fast allen Unit Test Frameworks so.
-
Ich fand das ganz hilfreich. Nutze boost-test und bin zufrieden. Habe aber auch nie etwas anders genutzt und weiß nicht, wie gut das im Vergleich ist.
-
@Schlangenmensch
Meine Ansicht bisher zu gtest:Contra:
die Macros verhindern bei mir (Codeblocks) funktionierendes Intellisense -> nervt
gtest-Quellcode mutet recht alt anPro:
relativ wenig Tipp-Aufwand für die Tests selber
xml-Report möglich ( gut zum Dokumentieren, wenn mal der Prüfer kommt )
-
@Jockelx sagte in Welches Unittest-Framework für C++:
Ich fand das ganz hilfreich. Nutze boost-test und bin zufrieden. Habe aber auch nie etwas anders genutzt und weiß nicht, wie gut das im Vergleich ist.
Boost entfällt. Wir nutzen es nicht und würden uns nur wegen des Test-Frameworks den Klopper nicht unbedingt ans Knie nageln
-
@It0101 sagte in Welches Unittest-Framework für C++:
xml-Report möglich ( gut zum Dokumentieren, wenn mal der Prüfer kommt )
von welchem prüfer redest du? machst du eine art programmierer-ausbildung?
-
@Bushmaster
Flugzeug stürzt ab ~> Softwarehersteller wird auf Einhaltung von Sorgfaltspflichten geprüft (gut)
Flugzeug stürzt nicht ab ~> Softwarehersteller wird auf Einhaltung von Sorgfaltspflichten geprüft (doppelplusgut)
-
@Bushmaster sagte in Welches Unittest-Framework für C++:
@It0101 sagte in Welches Unittest-Framework für C++:
xml-Report möglich ( gut zum Dokumentieren, wenn mal der Prüfer kommt )
von welchem prüfer redest du? machst du eine art programmierer-ausbildung?
Nein. Wenn man z.B. eine ISO-Zertifizierung haben will, oder man z.B. mit
https://de.wikipedia.org/wiki/Sonderprüfung_(KWG)](https://de.wikipedia.org/wiki/Sonderprüfung_(KWG))
zu tun hat.
Die Prüfer graben im allgemeinen relativ tief und interessieren sich durchaus für Sicherheitsstandards in der Softwareentwicklung.
-
@It0101 sagte in Welches Unittest-Framework für C++:
@Bushmaster sagte in Welches Unittest-Framework für C++:
@It0101 sagte in Welches Unittest-Framework für C++:
xml-Report möglich ( gut zum Dokumentieren, wenn mal der Prüfer kommt )
von welchem prüfer redest du? machst du eine art programmierer-ausbildung?
Nein. Wenn man z.B. eine ISO-Zertifizierung haben will, oder man z.B. mit
https://de.wikipedia.org/wiki/Sonderprüfung_(KWG)](https://de.wikipedia.org/wiki/Sonderprüfung_(KWG))
zu tun hat.
Die Prüfer graben im allgemeinen relativ tief und interessieren sich durchaus für Sicherheitsstandards in der Softwareentwicklung.alles klar. ich kenne sowas ähnliches von einem bekannten, der nach misra-regeln programmieren durfte. ist nicht witzig.
aber dass der reviewer die tests des entwicklers heranzieht ist schon komisch. er sollte doch besser seine eigenen tests haben, sonst könnte der entwickler seine verständnisfehler durch falsche tests begradigen und hinterher gucken alle nur dumm, wenn der jet trotzdem senkrecht in den ozean eindringt.
-
@Bushmaster Jein. Üblicherweise hat man verschiedene Ebenen. Unter anderem Tests auf Entwickler Seite, externe Tests und Reviews (ein Review beinhaltet an und für sich keine akive Ausführung von Tests). Und als Entwickler ist es schon Sinnvoll seine Tests auch dokumentieren zu können, für etwaige Reviews, weil eine gewisse Testabdeckung vlt Teil der Anforderungen war, oder um hinterher einfach belegen zu können, dass man alles mögliche Versucht hat um Fehler zu vermeiden (ganz klappt dass dann doch nicht).
-
@Schlangenmensch sagte in Welches Unittest-Framework für C++:
@Bushmaster Jein. Üblicherweise hat man verschiedene Ebenen. Unter anderem Tests auf Entwickler Seite, externe Tests und Reviews (ein Review beinhaltet an und für sich keine akive Ausführung von Tests). Und als Entwickler ist es schon Sinnvoll seine Tests auch dokumentieren zu können, für etwaige Reviews, weil eine gewisse Testabdeckung vlt Teil der Anforderungen war, oder um hinterher einfach belegen zu können, dass man alles mögliche Versucht hat um Fehler zu vermeiden (ganz klappt dass dann doch nicht).
wieso bin ich jetzt froh, dass ich meine brötchen nicht mit softwareentwicklung verdienen muss?
-
@It0101 sagte in Welches Unittest-Framework für C++:
Boost entfällt. Wir nutzen es nicht und würden uns nur wegen des Test-Frameworks den Klopper nicht unbedingt ans Knie nageln
Super-project for modularized Boost. Dabei lassen sich einzelne boost-libraries als Submodule klonen. Mir ist aber unbekannt, welche Submodule mindestens geklont werden müssen um boost kompilieren zu können. Wenn man nicht alles Submodule klont, muss man auch nicht den ganzen Klopper klonen.
Werde das irgendwann versuchen und dann boost mit
add_subdirectory
und cmake in das Projekt einbinden versuchen.
-
Mal ne Frage zu googletest:
Gibt es für "setup" und "teardown" auch Makros, oder muss man immer von der google-TestKlasse ableiten? Ich hab im Internet leider bisher nix dazu gefunden, sondern immer nur Leute, die von der Klasse ableiten.
-
@It0101 sagte in Welches Unittest-Framework für C++:
Gibt es für "setup" und "teardown" auch Makros, oder muss man immer von der google-TestKlasse ableiten?
Soweit ich weiß gibt es keine Makros dafür.
Es gibt aber die Möglichkeit ein globales "setup" und "teardown" zu definieren: https://github.com/google/googletest/blob/master/googletest/docs/advanced.md#global-set-up-and-tear-down
-
@Schlangenmensch
Gut, aber der Hauptpunkt bei Gtest ist ja eigentlich, dass man weniger Overhead-Code für die TESTs schreiben muss. Und gerade bei sowas was wichtigem wie "Fixtures" muss man dann doch wieder tippeln ohne Ende. Eigentlich schade. Da geht so ein bisschen der Vorteil gegenüber anderen Frameworks ( oder was eigenem ) verloren.
-
@titan99_ sagte in Welches Unittest-Framework für C++:
@It0101 sagte in Welches Unittest-Framework für C++:
Boost entfällt. Wir nutzen es nicht und würden uns nur wegen des Test-Frameworks den Klopper nicht unbedingt ans Knie nageln
Super-project for modularized Boost. Dabei lassen sich einzelne boost-libraries als Submodule klonen. Mir ist aber unbekannt, welche Submodule mindestens geklont werden müssen um boost kompilieren zu können. Wenn man nicht alles Submodule klont, muss man auch nicht den ganzen Klopper klonen.
Werde das irgendwann versuchen und dann boost mit
add_subdirectory
und cmake in das Projekt einbinden versuchen.Möchte noch darauf hinweisen, dass ich heute zu boost auf boostdep gestossen bin. boostdep. Bin nun noch zusätzlich auf BCP gestossen.