Vergleich von C++ Unit Test Frameworks [closed]

Lesezeit: 6 Minuten

Vergleich von C Unit Test Frameworks closed
Haushälterin

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

1646158208 95 Vergleich von C Unit Test Frameworks closed
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

Vergleich von C Unit Test Frameworks closed
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?

    – einpoklum

    4. November 2016 um 11:48 Uhr

1646158209 887 Vergleich von C Unit Test Frameworks closed
Sam Safran

Siehe diese Frage für einige Diskussionen.

Sie empfehlen die Artikel:
Erkundung des C++ Unit Testing Framework-Dschungels, von Noël Llopis. Und die neueren: C++ Test Unit Frameworks

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%
}

Es unterstützt:

  • Automatisch oder manuelle Testregistrierung
  • Viele Behauptungen
  • Automatischer Vergleich von Sammlungen
  • Verschiedene Ausgabeformate (inkl XML)
  • Vorrichtungen / Vorlagen

PS: Ich habe einen Artikel darüber geschrieben, der dir vielleicht beim Einstieg hilft: C++ Unit Testing Framework: Ein Boost-Test-Tutorial

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;
  • Prüfen Protokollierung: Log.Debug << "Starting test"; Log.Warn << "Here's a warning";
  • Vorrichtungen
  • Datengesteuert Tests (Theorien)
  • Wählen Sie aus, welche Tests ausgeführt werden sollen beyogen auf:
    • Attributabgleich
    • Namensteilstring-Übereinstimmung
    • Testsuiten

1646158209 497 Vergleich von C Unit Test Frameworks closed
Ratkok

CppUTest – sehr schönes, leichtes Framework mit Scheinbibliotheken. Es lohnt sich, genauer hinzusehen.

903500cookie-checkVergleich von C++ Unit Test Frameworks [closed]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy