boost.test与CppUnit

chr*_*mue 14 c++ boost cppunit boost-test

我一直在使用CppUnit已经有一段时间了(我很满意).当我们使用boost库的越来越多的部分时,我对boost.test进行了简短介绍,现在我想知道是否应该在新项目中切换到boost.test.

谁能在这里告诉我两个框架之间的差异以及使用boost.test的好处(如果有的话)?

Gen*_*tal 41

这比Boost.Test替代品更不笨重:

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

BOOST_AUTO_TEST_CASE( my_test, MyFixture )
{
    BOOST_CHECK_EQUAL(0, foo);
}
Run Code Online (Sandbox Code Playgroud)

宏确实有点长,但这更安全,建议在C++中练习.

我还没有看到更喜欢Google Test的一个技术理由(而且我知道很多人更喜欢Boost.Test).其余的只是你的偏好.

  • 同样好奇为什么你更喜欢Boost.Test.googletest有哪些优势? (9认同)
  • 我经常使用Boost.Test.你能详细说明"我知道不少喜欢Boost.Test"吗? (4认同)
  • 这些优势是什么? (3认同)

Gre*_*con 17

帮自己一个忙,直接进入Google Test,这使得CppUnit boost::unit_test变得笨拙和重复.

例如,假设您有一个简单的夹具:

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

  virtual void SetUp() { foo = 0; }
};
Run Code Online (Sandbox Code Playgroud)

要为您的灯具添加测试,请写下它!

TEST_F(MyFixture, FooStartsAtZero) {
  EXPECT_EQ(0, foo);
}
Run Code Online (Sandbox Code Playgroud)

这就是你所需要的.注意缺少明确的testsuite声明或单独的议程重复所有测试的名称.

将其编译为

$ 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入门高级指南,了解其他可行方法.