Ich weiß, dass es bereits einige Fragen zu Empfehlungen für C++-Unit-Test-Frameworks gibt, aber alle Antworten haben nicht geholfen, da sie nur eines der Frameworks empfehlen, aber keine Informationen über einen (Funktions-) Vergleich liefern.
Ich denke, die interessantesten Frameworks sind CppUnit, Boost und das neue Testing-Framework von Google. Hat schon jemand einen Vergleich gemacht?
mögliches Duplikat von Komponententests für C++-Code – Tools und Methodik
– HaskellElephant
1. August 2012 um 7:25 Uhr
Ich habe mein eigenes IOC-basiertes Test-Framework, das mir mehr gefällt, weil es nicht nur ein Klon dessen ist, was alle anderen tun, sondern das anspricht, was meiner Meinung nach alle Probleme der anderen sind. Sie schreiben Testfälle, indem Sie von einer Klasse ableiten, nicht indem Sie Makros verwenden. Makros werden nur für Behauptungen verwendet, da sie Ihnen Reflexion geben. Kundenspezifische Ausgabe von Prüfstatistiken. Führen Sie das IOC-Scripting aus, damit Sie wählen, was Sie testen, wie oft und mit welchen Parametern.
– Goldesel
23. Oktober 2014 um 15:48 Uhr
und aus Entwicklungssicht ist es brillant, denn wenn ich meinen eigenen Test hinzufüge, kann ich ihn ausführen, ohne gleichzeitig den aller anderen ausführen zu müssen. Ich weiß also, dass mein Code funktioniert.
– Goldesel
23. Oktober 2014 um 15:49 Uhr
Wernacht
Ein neuer Spieler ist Google-Test (auch bekannt als Google C++-Testframework) was aber ganz nett ist.
#include <gtest/gtest.h>
TEST(MyTestSuitName, MyTestCaseName) {
int actual = 1;
EXPECT_GT(actual, 0);
EXPECT_EQ(1, actual) << "Should be equal to one";
}
Haupteigenschaften:
tragbar
Tödlich u nicht fatale Behauptungen
Einfache Behauptungen informativ Mitteilungen: ASSERT_EQ(5, Foo(i)) << " where i = " << i;
Google-Test automatisch erkennt Ihre Tests und erfordert nicht, dass Sie sie aufzählen, um sie auszuführen
Machen Sie es sich leicht erweitern Ihr Aussagevokabular
Todestests (siehe erweiterte Anleitung)
SCOPED_TRACE für Unterprogrammschleifen
Du kannst entscheiden welche Tests durchgeführt werden sollen
XML Testberichterstellung
Vorrichtungen / Spotten / Vorlagen…
Ich genieße es wirklich, Google Test gegenüber einigen anderen Frameworks zu verwenden, insbesondere mit seinen Mocking-Funktionen, die im Googlemock-Framework zu finden sind.
– Mike
26. Oktober 2010 um 5:27 Uhr
Ich biete all diese Funktionen (obwohl einige noch nicht öffentlich sind) und mehr in meinem neuen Test-Framework CATCH. Siehe meine Antwort für den Link.
– philsquared
28. Dezember 2010 um 3:14 Uhr
Die Kombination mit dem Google C++ Mocking Framework macht es zu einem wirklich leistungsstarken xUnit-Testframework für Unit-Test-C++-Code.
– ratkok
7. Juni 2011 um 18:38 Uhr
@CashCow Das Ausführen mit dem Build unterscheidet sich von der Testerkennung. Das Ausführen mit Build hängt von Ihrem Build-System ab. Testerkennung bedeutet, dass Sie dies nicht tun verfügen über Um alle Tests in einer anderen Klasse aufzulisten, erstellen Sie einfach die Testmethoden und das war’s.
– Wernacht
3. November 2014 um 14:51 Uhr
Ich mag jedoch die übermäßige Verwendung von Makros und die Tatsache, dass gebräuchliche Wörter wie TEST verwendet werden, die mit etwas kollidieren könnten. GTEST wäre besser, es kollidiert weniger wahrscheinlich.
– Goldesel
5. November 2014 um 17:24 Uhr
philsquared
Ich habe gerade mein eigenes Framework vorangetrieben, FANGEN, dort draußen. Es befindet sich noch in der Entwicklung, aber ich glaube, dass es die meisten anderen Frameworks bereits übertrifft. Unterschiedliche Leute haben unterschiedliche Kriterien, aber ich habe versucht, das meiste ohne zu viele Kompromisse abzudecken. Werfen Sie einen Blick auf meinen verlinkten Blogeintrag für einen Vorgeschmack. Meine Top 5 Features sind:
Nur Kopfzeile
Automatische Registrierung von funktions- und methodenbasierten Tests
Zerlegt Standard-C++-Ausdrücke in LHS und RHS (damit Sie keine ganze Familie von Assert-Makros benötigen).
Unterstützung für verschachtelte Abschnitte innerhalb eines funktionsbasierten Fixtures
Namenstests in natürlicher Sprache – Funktions-/Methodennamen werden generiert
Es hat auch Objective-C-Bindungen. Das Projekt wird auf gehostet GitHub
Bitte erwägen Sie das Hinzufügen CHECK_FLASE und REQUIRE_FLASE Makros.
– Emil Cormier
6. November 2014 um 21:40 Uhr
Meiner Meinung nach der beste Rahmen.
– KaffeeEntwickler
27. August 2015 um 11:09 Uhr
doctest ist meine Neuimplementierung von Catch mit einem großen Fokus auf Kompilierungsgeschwindigkeit – Checkout the FAQ um zu sehen, wie sie sich unterscheiden
– onqtam
10. Oktober 2016 um 19:34 Uhr
@einpoklum Catch wird nicht aufgegeben – der Ersteller arbeitet an Version 2 der Bibliothek. doctest ist eine Art Neuimplementierung von Catch 1 mit einigen zusätzlichen Designentscheidungen
– onqtam
4. November 2016 um 9:22 Uhr
Ich bin wirklich ratlos, wenn ich alle Testframeworks vergleiche (von denen ich mich jetzt für eines entscheiden muss). Würden Sie Ihre eigene Antwort schreiben, indem Sie doctest mit Catch und anderen Angeboten vergleichen und gegenüberstellen?
Ich habe noch keinen Artikel gefunden, der Googletest mit den anderen Frameworks vergleicht.
Wie ich schrieb: Alle Antworten empfehlen nur eines der Frameworks, vergleichen das Framework jedoch nicht mit einem anderen.
– Hausfrau
28. Oktober 2008 um 11:21 Uhr
Sie sind mit dem Artikel auch nicht zufrieden ?
– Gishu
28. Oktober 2008 um 11:33 Uhr
Ein Kritikpunkt: Der Artikel ist zwar gut, stammt aber aus dem Jahr 2004 und enthält keinen Google-Test.
– richq
28. Oktober 2008 um 11:54 Uhr
Im ersten Link sehen Sie zwei Vergleiche. Bis auf das neue Framework von Google sind (sind?) die meisten Informationen immer noch relevant. (Und CppUnit ist nicht das Interessanteste, es ist zu ungeschickt zu benutzen)
– Luc Hermitte
28. Oktober 2008 um 12:55 Uhr
Links korrigiert und die Antwort um einen neueren Vergleich erweitert
– Sam Safran
28. Oktober 2008 um 21:13 Uhr
Boost-Testbibliothek ist eine sehr gute Wahl, besonders wenn Sie Boost bereits verwenden.
// TODO: Include your class to test here.
#define BOOST_TEST_MODULE MyTest
#include <boost/test/unit_test.hpp>
BOOST_AUTO_TEST_CASE(MyTestCase)
{
// To simplify this example test, let's suppose we'll test 'float'.
// Some test are stupid, but all should pass.
float x = 9.5f;
BOOST_CHECK(x != 0.0f);
BOOST_CHECK_EQUAL((int)x, 9);
BOOST_CHECK_CLOSE(x, 9.5f, 0.0001f); // Checks differ no more then 0.0001%
}
Wikipedia hat eine umfassende Liste der Unit-Testing-Frameworksmit Tabellen, die unterstützte oder nicht unterstützte Funktionen identifizieren.
Ich habe kürzlich veröffentlicht xUnit++speziell als Alternative zu Google Test und der Boost Test Library (siehe die Vergleiche). Wenn Sie mit xUnit.Net vertraut sind, sind Sie bereit für xUnit++.
#include "xUnit++/xUnit++.h"
FACT("Foo and Blah should always return the same value")
{
Check.Equal("0", Foo()) << "Calling Foo() with no parameters should always return \"0\".";
Assert.Equal(Foo(), Blah());
}
THEORY("Foo should return the same value it was given, converted to string", (int input, std::string expected),
std::make_tuple(0, "0"),
std::make_tuple(1, "1"),
std::make_tuple(2, "2"))
{
Assert.Equal(expected, Foo(input));
}
Haupteigenschaften:
Unglaublich schnell: Tests laufen gleichzeitig.
tragbar
Automatisch Testanmeldung
Viele Behauptungstypen (Boost hat nichts auf xUnit++)
Vergleicht Sammlungen nativ.
Behauptungen kommen rein drei Ebenen:
fatale Fehler
nicht schwerwiegende Fehler
Warnungen
Leicht behaupten Protokollierung: Assert.Equal(-1, foo(i)) << "Failed with i = " << i;
mögliches Duplikat von Komponententests für C++-Code – Tools und Methodik
– HaskellElephant
1. August 2012 um 7:25 Uhr
Ich habe mein eigenes IOC-basiertes Test-Framework, das mir mehr gefällt, weil es nicht nur ein Klon dessen ist, was alle anderen tun, sondern das anspricht, was meiner Meinung nach alle Probleme der anderen sind. Sie schreiben Testfälle, indem Sie von einer Klasse ableiten, nicht indem Sie Makros verwenden. Makros werden nur für Behauptungen verwendet, da sie Ihnen Reflexion geben. Kundenspezifische Ausgabe von Prüfstatistiken. Führen Sie das IOC-Scripting aus, damit Sie wählen, was Sie testen, wie oft und mit welchen Parametern.
– Goldesel
23. Oktober 2014 um 15:48 Uhr
und aus Entwicklungssicht ist es brillant, denn wenn ich meinen eigenen Test hinzufüge, kann ich ihn ausführen, ohne gleichzeitig den aller anderen ausführen zu müssen. Ich weiß also, dass mein Code funktioniert.
– Goldesel
23. Oktober 2014 um 15:49 Uhr