2010-06-23 8 views
14

Ich benutze CppUnit schon eine ganze Weile (und bin damit zufrieden). Da wir immer mehr Teile der Boost-Bibliothek benutzen, habe ich einen kurzen Blick auf boost.test geworfen und ich frage mich jetzt, ob ich in einem neuen Projekt zu boost.test wechseln sollte oder nicht.boost.test vs. CppUnit

Kann mir hier jemand von den Unterschieden zwischen den beiden Frameworks und den Vorteilen (falls vorhanden) von boost.test berichten?

+4

Sie werden wahrscheinlich die Antworten auf http://stackoverflow.com/questions/242926/comparison-of-c-unit-test-frameworks nützlich finden. –

+0

@Alex: Danke für Ihren Beitrag, es gibt einige sehr hilfreiche Links darin – chrmue

+0

Gute Verbindung, AAlex, +1. @chrmue, um zu klären - sollte der Vergleich, nach dem Sie suchen, einen Boost-Benutzer annehmen oder nicht? Fragen Sie: "Wenn ich Boost zur Entwicklung nutze, hat Boost dann einen Vorteil?" Oder suchen Sie nur einen einfachen Vergleich? – Mawg

Antwort

17

Tun Sie sich einen Gefallen und gehen Sie direkt zu Google Test, was CppUnit und boost::unit_test klobig und sich wiederholend aussehen lässt.

Zum Beispiel, sagen Sie eine einfache Befestigung haben:

class MyFixture : public ::testing::Test 
{ 
    protected: 
    int foo; 

    virtual void SetUp() { foo = 0; } 
}; 

Um einen Test zu Ihren Scheinwerfer hinzufügen, schreiben Sie es!

TEST_F(MyFixture, FooStartsAtZero) { 
    EXPECT_EQ(0, foo); 
} 

Das ist alles was Sie brauchen. Beachten Sie das Fehlen expliziter Testsuite-Deklarationen oder eine separate Agenda, die alle Namen Ihrer Tests wiederholt. nur

Kompilieren es wie in

$ g++ -o utest utest.cpp -lgtest -lgtest_main

und führen Sie Ihre Test

Running main() from gtest_main.cc 
[==========] Running 1 test from 1 test case. 
[----------] Global test environment set-up. 
[----------] 1 test from MyFixture 
[ RUN  ] MyFixture.FooStartsAtZero 
[  OK ] MyFixture.FooStartsAtZero (0 ms) 
[----------] 1 test from MyFixture (0 ms total) 

[----------] Global test environment tear-down 
[==========] 1 test from 1 test case ran. (0 ms total) 
[ PASSED ] 1 test.

zu bekommen (Führen Sie es selbst den schönen grünen Text für die Prüfungen zu sehen!)

Dies ist der Anfang. Werfen Sie einen Blick auf die Google Test primer und die advanced guide, um zu sehen, was sonst noch möglich ist.

+1

+1 Ich stellte mir die gleiche Frage, und diese Antwort hat mich dazu veranlasst, Google Test zu betrachten. Vielen Dank. – Mawg

+0

Danke für das Posten dieser Antwort! Es beantwortet meine Frage nicht wirklich, aber es wies mich auf einen Unit-Test-Framework hin, den ich noch nicht kannte und der wirklich vielversprechend aussieht. Was mir auf den ersten Blick am meisten gefällt, ist die Art und Weise, wie Testfälle ausgedrückt werden: die kürzest mögliche Form! – chrmue

+0

@chrmue Danke für die Berücksichtigung! Sie werden von der Kraft und Ausdruckskraft von Google Test begeistert sein. –

41

Wie dies weniger klobig als Boost.Test Alternative:

class MyFixture { MyFixture() { /* setup here */} }; 

BOOST_AUTO_TEST_CASE(my_test, MyFixture) 
{ 
    BOOST_CHECK_EQUAL(0, foo); 
} 

Makros zwar etwas länger, aber das ist sicherer und Praxis in C++ empfohlen.

Ich habe noch einen einzigen technischen Grund zu sehen, Google Test zu bevorzugen (und ich kenne einige, um Boost.Test zu bevorzugen). Der Rest ist nur deine Vorliebe.

+4

Ich benutze Boost.Test viel. Können Sie näher ausführen "Ich kenne einige, um Boost.Test zu bevorzugen"? –

+9

Auch neugierig, warum Sie Boost.Test bevorzugen. Was sind die Vorteile gegenüber Google Test? – Eloff

+3

Was sind diese Vorteile? – Etherealone