2010-06-23 6 views
14

Я уже давно использую CppUnit (и доволен этим). Поскольку мы используем все больше и больше частей библиотеки boost, у меня был короткий взгляд на boost.test, и теперь мне интересно, должен ли я переключиться на boost.test в новом проекте или нет.boost.test против CppUnit

Может ли кто-нибудь здесь рассказать мне о различиях между двумя структурами и преимуществами (если они есть) использования boost.test?

+4

Возможно, вы найдете ответы на http://stackoverflow.com/questions/242926/comparison-of-c-unit-test-frameworks полезным. –

+0

@Alex: спасибо за сообщение, в нем есть очень полезные ссылки – chrmue

+0

Хорошая ссылка, AAlex, +1. @chrmue, чтобы уточнить - должно ли сравнение, которое вы ищете, использовать пользователя Boost или нет? Вы спрашиваете: «Если я использую Boost для разработки, тогда есть ли преимущество использования текста Boost?» или вы просто ищете простое сравнение? – Mawg

ответ

17

Сделайте себе одолжение и перейдите прямо к Google Test, что делает CppUnit и boost::unit_test неудобными и повторяющимися.

Например, у вас есть простой прибор:

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

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

Чтобы добавить тест на свою арматуру, писать!

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

Это все, что вам нужно. Обратите внимание на отсутствие явных объявлений testuite или отдельную повестку дня, которая повторяет все имена ваших тестов.

Собирать как в

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

и запустить тест, чтобы получить

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.

(Выполнить это самостоятельно, чтобы увидеть хороший зеленый текст для прохождения тестов!)

Это только начало. Взгляните на Google Test primer и advanced guide, чтобы узнать, что еще возможно.

+1

+1 Я задавал себе тот же вопрос, и этот ответ побудил меня взглянуть на Google Test. Благодарю. – Mawg

+0

Спасибо за сообщение! Он действительно не отвечает на мой вопрос, но он указал мне на единую тестовую структуру, которую я еще не знал, и это выглядит очень многообещающе. Что мне больше всего нравится на первый взгляд, так это то, как выражаются тестовые примеры: кратчайшая возможная форма! – chrmue

+0

@chrmue Спасибо за внимание! Вы будете в восторге от силы и выразительности Google Test. –

41

Как это менее неуклюжим, чем Boost.Test альтернатива:

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

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

Макросы действительно немного дольше, но это безопаснее и рекомендуемой практики в C++.

Я еще не вижу единственной технической причины, чтобы предпочесть тест Google (и я знаю немало, чтобы предпочесть Boost.Test). Остальное - это только ваше предпочтение.

+4

Я использую Boost.Test много. Можете ли вы подробно остановиться на «Я знаю немало, чтобы предпочесть Boost.Test»? –

+9

Также любопытно, почему вы предпочитаете Boost.Test. Каковы преимущества перед googletest? – Eloff

+3

Каковы эти преимущества? – Etherealone