335 Stimmen

Vergleich von C++-Unit-Test-Frameworks

Ich weiß, dass es bereits einige Fragen zu Empfehlungen für C++-Unit-Test-Frameworks gibt, aber alle Antworten waren nicht hilfreich, 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 Google Testing Framework. Hat schon jemand einen Vergleich angestellt?

16voto

moswald Punkte 11212

Ich habe kürzlich veröffentlicht xUnit++ , insbesondere 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));
}

Hauptmerkmale:

  • Unglaublich schnell: Tests laufen gleichzeitig .
  • Tragbar
  • Automatisch Testanmeldung
  • Viele Behauptungstypen (Boost hat nichts mit xUnit++ zu tun)
  • Vergleicht Sammlungen nativ.
  • Behauptungen kommen in drei Ebenen:
    • fatale Fehler
    • nicht-tödliche Fehler
    • Warnungen
  • Einfach behaupten. Protokollierung: Assert.Equal(-1, foo(i)) << "Failed with i = " << i;
  • Test Protokollierung: Log.Debug << "Starting test"; Log.Warn << "Here's a warning";
  • Einrichtungsgegenstände
  • Datengesteuert Tests (Theorien)
  • Wählen Sie die auszuführenden Tests basierend auf:
    • Attributabgleich
    • Teilstring-Übereinstimmung von Namen
    • Test-Suiten

5voto

ratkok Punkte 772

CppUTest - sehr schönes, leichtes Framework mit Mock-Bibliotheken. Es lohnt sich, einen genaueren Blick darauf zu werfen.

4voto

Roger Punkte 41

CPUnit ( http://cpunit.sourceforge.net ) ist ein Framework, das Google Test ähnelt, aber weniger Makros verwendet (Asserts sind Funktionen), und bei dem die Makros mit einem Präfix versehen sind, um die üblichen Makro-Fallen zu vermeiden. Tests sehen so aus:

#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 registrieren sich automatisch, so dass Sie nicht mehr als diese Angaben benötigen. Dann heißt es nur noch kompilieren und ausführen. Ich finde, dass die Verwendung dieses Frameworks sehr ähnlich wie die Verwendung von JUnit ist, für diejenigen, die einige Zeit mit der Programmierung von Java verbracht haben. Sehr schön!

3voto

Dave Young Punkte 31

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

2voto

linuxbuild Punkte 15460

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

Ein automatischer Generator für grundlegende Einheitstests für eine gemeinsam genutzte C/C++-Bibliothek. Er ist in der Lage, vernünftige (in den meisten, aber leider nicht allen Fällen) Eingabedaten für Parameter zu generieren und einfache ("sanity" oder "shallow"-Qualität) Testfälle für jede Funktion in der API durch die Analyse von Deklarationen in Header-Dateien zu komponieren.

Die Qualität der generierten Tests erlaubt es, die Abwesenheit von kritischen Fehlern in einfachen Anwendungsfällen zu überprüfen. Das Tool ist in der Lage, generierte Tests zu erstellen und auszuführen und Abstürze (Segfaults), Abbrüche, alle Arten von ausgegebenen Signalen, Programmrückgabecodes ungleich Null und Programmaufhängungen zu erkennen.

Einzigartige Funktionen im Vergleich zu CppUnit, Boost und Google Test:

  • Automatische Generierung von Testdaten und Eingabeargumenten (auch für komplexe Datentypen)
  • Modern und in hohem Maße wiederverwendbar spezielle Typen anstelle von Vorrichtungen und Schablonen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X