2010-06-23 12 views
14

Utilizzo CppUnit da un po 'di tempo (e ne sono felice). Dato che stiamo usando sempre più parti della libreria boost, ho dato un'occhiata a boost.test e ora mi chiedo se dovrei passare a boost.test in un nuovo progetto oppure no.boost.test vs. CppUnit

Qualcuno può parlarmi delle differenze tra i due framework e i vantaggi (se ce ne sono) dell'utilizzo di boost.test?

+4

Probabilmente troverai utili le risposte a http://stackoverflow.com/questions/242926/comparison-of-c-unit-test-frameworks. –

+0

@Alex: grazie per il tuo post, ci sono alcuni link molto utili in esso – chrmue

+0

Good link, AAlex, +1. @ chrmue, per chiarire - il confronto che stai cercando presuppone un utente Boost o no? Stai chiedendo "se utilizzo Boost per svilupparlo, allora c'è un vantaggio nell'usare il testo Boost?" o stai solo cercando un confronto diretto? – Mawg

risposta

17

Concediti un favore e vai direttamente allo Google Test, il che rende CppUnit e boost::unit_test un aspetto goffo e ripetitivo.

Per esempio, supponiamo di avere un semplice apparecchio:

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

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

Per aggiungere un test per il vostro dispositivo, scriverlo!

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

Questo è tutto ciò che serve. Si noti la mancanza di dichiarazioni esplicite di testsuite o di un'agenda separata che ripete tutti i nomi dei test.

compilare come in

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

ed eseguire il test per ottenere

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.

(gestire direttamente per vedere il bel testo in verde per passare le prove!)

questo è solo l'inizio. Dai uno sguardo allo Google Test primer e allo advanced guide per vedere cos'altro è possibile.

+1

+1 Mi stavo ponendo la stessa domanda e questa risposta mi ha spinto a guardare Google Test. Grazie. – Mawg

+0

Grazie per aver postato questa risposta! In realtà non risponde alla mia domanda, ma mi ha indirizzato verso un framework di unit test che non conoscevo ancora e che sembra davvero promettente. Quello che mi piace di più a prima vista è il modo in cui vengono espressi i casi di test: la forma più breve possibile! – chrmue

+0

@chrmue Grazie per aver pensato! Sarai elettrizzato dalla potenza ed espressività di Google Test. –

41

Come è meno goffo di Boost.Test alternativa:

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

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

macro davvero un po 'più a lungo, ma questo è più sicuro ed è consigliato pratica in C++.

Devo ancora vedere un singolo motivo tecnico per preferire Google Test (e ne conosco abbastanza per preferire Boost.Test). Il resto è solo la tua preferenza.

+4

Uso Boost.Test molto. Puoi approfondire "Ne conosco abbastanza per preferire Boost.Test"? –

+9

Anche curioso di sapere perché preferisci Boost.Test. Quali sono i vantaggi rispetto a googletest? – Eloff

+3

Quali sono questi vantaggi? – Etherealone