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?

132voto

Wernight Punkte 33996

Ein neuer Spieler ist Google-Test (auch bekannt als Google C++ Testing Framework ), was allerdings 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:

  • Tragbar
  • Tödlich und nicht-fatale Behauptungen
  • Einfache Behauptungen informativ Nachrichten : ASSERT_EQ(5, Foo(i)) << " where i = " << i;
  • Google-Test automatisch erkennt Ihre Tests und verlangt nicht, dass Sie sie aufzählen, um sie auszuführen
  • Machen Sie es einfach erweitern. Ihr Behauptungsvokabular
  • Tests zum Tod (siehe Leitfaden für Fortgeschrittene)
  • SCOPED_TRACE für Unterprogrammschleifen
  • Sie können entscheiden welche Tests durchgeführt werden sollen
  • XML Erstellung von Prüfberichten
  • Einrichtungsgegenstände / Mock / Schablonen ...

129voto

philsquared Punkte 22090

Ich habe gerade meinen eigenen Rahmen überschritten, CATCH da draußen. Es ist noch in der Entwicklung, aber ich glaube, es übertrifft bereits die meisten anderen Frameworks. Verschiedene Leute haben unterschiedliche Kriterien, aber ich habe versucht, das meiste abzudecken, ohne zu viele Kompromisse einzugehen. Werfen Sie einen Blick auf den verlinkten Blogeintrag, um einen Vorgeschmack zu bekommen. Meine fünf wichtigsten Funktionen sind:

  • Nur Kopfzeile
  • Automatische Registrierung von funktions- und methodenbasierten Tests
  • Zerlegt standardmäßige C++-Ausdrücke in LHS und RHS (damit Sie nicht eine ganze Familie von Assert-Makros benötigen).
  • Unterstützung für verschachtelte Abschnitte innerhalb einer funktionsbasierten Halterung
  • Benennen von Tests mit natürlicher Sprache - Funktions-/Methodennamen werden generiert

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

108voto

Sam Saffron Punkte 124121

Siehe diese Frage für einige Diskussionen.

Sie empfehlen die Artikel: Erkundung des C++ Unit Testing Framework Jungle Von Noel Llopis. Und die neuere: C++ Test Unit Frameworks

Ich habe noch keinen Artikel gefunden, der googletest mit den anderen Frameworks vergleicht.

55voto

Wernight Punkte 33996

Boost-Test-Bibliothek ist eine sehr gute Wahl, besonders wenn Sie bereits Boost 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 Tests Registrierung
  • Viele Behauptungen
  • Automatischer Vergleich von Sammlungen
  • Verschiedene Ausgabeformate (einschließlich XML )
  • Einrichtungsgegenstände / Schablonen ...

PS: Ich habe einen Artikel darüber geschrieben, der Ihnen den Einstieg erleichtern könnte: C++ Unit Testing Framework: Ein Boost-Test-Tutorial

27voto

John Deters Punkte 4208

Wikipedia hat eine umfassende Liste der Unit-Test-Frameworks mit Tabellen, aus denen hervorgeht, welche Funktionen unterstützt werden und welche nicht.

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