Frage

Ich weiß, es gibt schon ein paar Fragen zu Empfehlungen für C ++ Unit-Test-Frameworks, aber alle Antworten helfen nicht, da sie nur eine der Rahmenbedingungen empfehlen, aber geben keine Informationen über eine (Feature) Vergleich.

Ich denke, die interessantesten Frameworks sind CppUnit, Boost und den neuen Google-Test-Framework. Hat jemand noch einen Vergleich gemacht?

War es hilfreich?

Lösung

Sehen Sie diese Frage für einige Diskussion.

Sie empfehlen die Artikel: Erforschung der C ++ Unit Testing Framework Jungle , von Noel Llopis. Und die jüngere: C ++ Test Unit Frameworks

Ich habe nicht einen Artikel gefunden, die noch googletest zu dem anderen Frameworks vergleicht.

Andere Tipps

Ein neuer Spieler ist Google-Test (auch als Google C ++ Testing-Framework bekannt ), die zwar sehr schön ist.

#include <gtest/gtest.h>

TEST(MyTestSuitName, MyTestCaseName) {
    int actual = 1;
    EXPECT_GT(actual, 0);
    EXPECT_EQ(1, actual) << "Should be equal to one";
}

Hauptmerkmale:

  • Mobile
  • Fatal und Nicht-tödliche Behauptungen
  • Einfache Behauptungen informativ Nachrichten : ASSERT_EQ(5, Foo(i)) << " where i = " << i;
  • Google Test automatisch erkennt Ihre Tests und nicht Sie sie benötigen sie, um aufzuzählen auszuführen
  • Machen Sie es einfach zu erweitern Ihre Behauptung Vokabular
  • Der Tod Tests (siehe erweiterte Führer)
  • SCOPED_TRACE für Unterprogrammschleifen
  • Sie können entscheiden, , die laufen Tests
  • XML Prüfprotokollerstellung
  • Leuchten / Mock / Vorlagen ...

Ich habe geschoben nur meinen eigenen Rahmen, CATCH, da draußen. Es ist noch in der Entwicklung, aber ich glaube, es ist bereits die meisten anderen Frameworks übertrifft. Unterschiedliche Menschen haben unterschiedliche Kriterien, aber ich habe versucht, die meisten Böden zu decken, ohne zu viele Kompromisse. Werfen Sie einen Blick auf meine verknüpften Blog-Eintrag für eine Schnupper. Meine Top fünf Merkmale sind:

  • Rubrik nur
  • Automatische Registrierung von Funktion und Methode basierten Tests
  • Zerfällt Standard C ++ Ausdrücke in LHS und RHS (so brauchen Sie nicht eine ganze Familie von Assertion-Makros).
  • Unterstützung für verschachtelte Abschnitte innerhalb einer Funktion basiert Halterung
  • Name Tests in natürlicher Sprache - Funktion / Methodennamen erzeugt

Es hat auch Objective-C-Bindungen. Das Projekt wird gehostet von Github

Erhöhung Testbibliothek ist eine sehr gute Wahl vor allem, wenn Sie bereits Boost.

// 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:

  • Automatische oder manuelle Tests Registrierung
  • Viele Behauptungen
  • Automatische Vergleich von Sammlungen
  • Verschiedene Ausgabeformate (einschließlich XML )
  • Leuchten / Vorlagen ...

PS: Ich schrieb es einen Artikel über die Sie kann helfen, den Einstieg: C ++ Unit Testing Framework : A Test-Tutorial-Boost

Wikipedia hat eine umfassende Liste der Test-Frameworks Einheit , mit Tabellen, die unterstützten Funktionen zu identifizieren oder nicht .

Ich habe vor kurzem veröffentlicht xUnit ++ , speziell als Alternative zu Google-Test und die Boost-Test-Bibliothek (sehen Sie 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));
}

Hauptmerkmale:

  • Unglaublich schnell: Tests laufen gleichzeitig
  • .
  • Mobile
  • Automatische Test Registrierung
  • Viele Behauptung Typen (Boost-nichts auf xUnit hat ++)
  • Vergleicht Sammlungen nativ.
  • Assertions kommen in drei Ebenen:
    • fatale Fehler
    • nicht schwerwiegende Fehler
    • Warnungen
  • Einfach Assertion Protokollierung: Assert.Equal(-1, foo(i)) << "Failed with i = " << i;
  • Test Protokollierung: Log.Debug << "Starting test"; Log.Warn << "Here's a warning";
  • Leuchten
  • Datengetriebenes Tests (Theorien)
  • Wählen Sie das, um Tests auf Basis von:
    • Attribut für:
    • Name String matchin
    • Test Suites

CppUTest - sehr schön, geringes Gewicht Rahmen mit Mock-Bibliotheken. Lohnenswerte einen näheren Blick.

CPUnit ( http://cpunit.sourceforge.net ) ist ein Framework, das auf Google-Test ähnlich ist, die aber auf weniger macos beruht (behauptet sind Funktionen), und wo die Makros werden als Präfix den üblichen Makro pitfall zu vermeiden. Tests wie folgt aussehen:

#include <cpunit>

namespace MyAssetTest {
    using namespace cpunit;

    CPUNIT_FUNC(MyAssetTest, test_stuff) {
        int some_value = 42;
        assert_equals("Wrong value!", 666, some_value);
    }

    // Fixtures go as follows:
    CPUNIT_SET_UP(MyAssetTest) {
        // Setting up suite here...
        // And the same goes for tear-down.
    }

}

Sie Auto-Registrierung, so müssen Sie nicht mehr als das. Dann ist es nur kompiliert und ausgeführt. Ich finde mit diesem Rahmen sehr ähnlich wie JUnit verwenden, für diejenigen, die hatten einige Zeit die Programmierung mit Java zu verbringen. Sehr schön!

Es gibt einige relevante C ++ Unit-Tests Ressourcen http://www.progweap.com/resources.html

API Sanity Checker - Test-Framework für C / C ++ Bibliotheken:

  

Ein automatischer Generator von Grundeinheitstests für eine gemeinsamen C / C ++ Bibliothek. Es ist in der Lage vernünftig zu erzeugen (in den meisten, aber leider nicht in alle Fälle) Eingangsdaten für Parameter und komponieren einfach ( „geistige Gesundheit“ oder „flache“ -Qualität) Testfälle für jede Funktion in der API durch die Analyse von Erklärungen in Kopf Dateien.

     

Die Qualität der generierten Tests ermöglicht Fehlen kritischer Fehler in einfachen Anwendungsfällen zu überprüfen. Das Werkzeug ist in der Lage zu bauen und generierten Tests auszuführen und Abstürze (segfaults) zu erfassen, bricht, alle Arten von ausgesendeten Signalen, von Null Programmrückkehrcode und Programm hängen.

Alleinstellungsmerkmale im Vergleich zu CppUnit Boost und Google Test:

  • Automatische Generierung von Testdaten und Eingabeargumenten (auch für komplexe Datentypen)
  • Modern und sehr wiederverwendbar spezialisierte Typen anstelle von Vorrichtungen und Vorlagen
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top