【问题标题】:C++ Boost Unit Test: How to manually finish unit test with success?C ++ Boost单元测试:如何成功手动完成单元测试?
【发布时间】:2016-05-26 18:04:48
【问题描述】:

目前我正在编写一个基于 Boost asio 的网络库。 我想用一种环回回声测试自动测试我的库。 问题是,服务器连续运行,因此测试永远不会结束。 我的想法是对响应数据进行一些 EQUAL 测试,并成功手动停止单元测试。如果以其他方式发生超时,则测试应该以失败停止(我知道,它更像是作为单元测试的集成测试)...... 是否有 Boost Unit Test 宏可以手动停止测试并成功?

谢谢!

【问题讨论】:

  • 手动?您的意思是从“外部”向测试过程发出一些命令?
  • 我想从 BOOST_AUTO_TEST_CASE / 函数内部停止。
  • 你能发布一些你的测试用例的(伪)代码吗?

标签: c++ unit-testing networking boost boost-asio


【解决方案1】:

您可以离开测试功能,这将被视为成功。如果要显式“设置”结果,可以使用BOOST_CHECK(true) 表示成功,或使用BOOST_CHECK(false) 表示失败。这些宏有多种变体,在失败时会打印一条附加消息 (BOOST_CHECK_MESSAGE)。

测试框架本身是单线程的,各个测试一个接一个地运行。每个测试函数都必须以明确的return 语句或“落到最后”的执行结束。

如果您调用的函数本身不会返回但需要一些触发器来执行此操作,则您需要在调用该函数之前以某种方式安排此触发器。这可能需要启动一个线程,在那里等待一段时间,然后发送触发器以使阻塞函数返回。

【讨论】:

  • 感谢您的快速回复! “离开”是什么意思?如果我从我的测试用例返回,什么都不会发生并且会发生超时。
  • 嗯,不应该这样。是否涉及多个线程?超时发生在哪里?在 boost 测试框架或您的被测组件中?
  • 或者你使用的是timeout装饰器(boost.org/doc/libs/1_61_0/libs/test/doc/html/boost_test/…)?
  • 嗨马文,很抱歉我的回复晚了。你是对的。这是多线程的错误。如果所有测试都成功,我只是停止了线程内的 io_service。非常感谢!
猜你喜欢
  • 2023-04-01
  • 1970-01-01
  • 2018-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多