Подтвердить что ты не робот

Boost.test против CppUnit

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

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

4b9b3361

Ответ 1

Сделайте себе одолжение и перейдите прямо к 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 и расширенное руководство чтобы увидеть, что еще возможно.

Ответ 2

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

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

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

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

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