【问题标题】:boost.test vs. CppUnitboost.test 与 CppUnit
【发布时间】:2010-06-23 09:09:58
【问题描述】:

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

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

【问题讨论】:

  • 您可能会发现stackoverflow.com/questions/242926/… 的答案很有用。
  • @Alex:感谢您的帖子,里面有一些非常有用的链接
  • 好链接,AAlex,+1。 @chrmue,澄清一下 - 您正在寻找的比较是否应该假设一个 Boost 用户?您是在问“如果我使用 Boost 进行开发,那么使用 Boost 文本是否有优势?”还是您只是在寻找一个简单的比较?

标签: c++ boost cppunit boost-test


【解决方案1】:

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

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

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

宏确实有点长,但这样更安全,推荐在 C++ 中练习。

我还没有看到更喜欢 Google Test 的单一技术原因(我知道很多人更喜欢 Boost.Test)。其余的只是你的喜好。

【讨论】:

  • 我经常使用 Boost.Test。您能否详细说明“我知道很多人更喜欢 Boost.Test”?
  • 也很好奇为什么你更喜欢 Boost.Test。与 googletest 相比有什么优势?
  • 这些优势是什么?
【解决方案2】:

帮自己一个忙,直接访问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);
}

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

按如下方式编译

$ 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 Test primeradvanced guide 看看还有什么可能。

【讨论】:

  • +1 我也在问自己同样的问题,这个答案促使我查看 Google Test。谢谢。
  • 感谢您发布此答案!它并没有真正回答我的问题,但它向我指出了一个我还不知道的单元测试框架,它看起来很有希望。第一眼最喜欢的就是测试用例的表达方式:尽可能短的形式!
  • @chrmue 感谢您的考虑!您会为 Google Test 的强大功能和表现力而激动不已。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-16
相关资源
最近更新 更多