我已经使用 CppUnit 有一段时间了(并且很满意)。随着我们使用越来越多的 boost 库的部分,我对 boost.test 做了一个简短的了解,现在我想知道是否应该在新项目中切换到 boost.test。
谁能告诉我这两个框架之间的区别以及使用 boost.test 的好处(如果有的话)?
我已经使用 CppUnit 有一段时间了(并且很满意)。随着我们使用越来越多的 boost 库的部分,我对 boost.test 做了一个简短的了解,现在我想知道是否应该在新项目中切换到 boost.test。
谁能告诉我这两个框架之间的区别以及使用 boost.test 的好处(如果有的话)?
这比 Boost.Test 替代方案更不笨重:
class MyFixture { MyFixture() { /* setup here */} };
BOOST_AUTO_TEST_CASE( my_test, MyFixture )
{
BOOST_CHECK_EQUAL(0, foo);
}
宏确实有点长,但这样更安全,并且是 C++ 中推荐的做法。
我还没有看到一个更喜欢 Google Test 的技术原因(我知道很多人更喜欢 Boost.Test)。其余的只是你的喜好。
帮自己一个忙,直接去谷歌测试,这使得 CppUnitboost::unit_test
看起来很笨重和重复。
例如,假设您有一个简单的夹具:
class MyFixture : public ::testing::Test
{
protected:
int foo;
virtual void SetUp() { foo = 0; }
};
要将测试添加到您的夹具中,请编写它!
TEST_F(MyFixture, FooStartsAtZero) {
EXPECT_EQ(0, foo);
}
这就是你所需要的。请注意缺少明确的测试套件声明或重复所有测试名称的单独议程。
像这样编译它
$ g++ -o utest utest.cpp -lgtest -lgtest_main
并运行您的测试以获得
从 gtest_main.cc 运行 main() [==========] 从 1 个测试用例运行 1 个测试。 [---------] 全局测试环境设置。 [---------] 来自 MyFixture 的 1 个测试 [ 运行 ] MyFixture.FooStartsAtZero [确定] MyFixture.FooStartsAtZero (0 毫秒) [---------] 来自 MyFixture 的 1 次测试(总共 0 毫秒) [---------] 全局测试环境拆解 [==========] 1 个测试用例运行了 1 个测试。(总共 0 毫秒) [通过] 1 次测试。
(自己运行它以查看通过测试的漂亮绿色文本!)
这仅仅是个开始。查看Google 测试入门和高级指南,看看还有什么可能。