【问题标题】:boost unit testing exceptions [closed]提升单元测试异常[关闭]
【发布时间】:2014-03-13 12:29:42
【问题描述】:

我正在尝试在客户端服务器 N/W 上执行 boost 单元测试。

我将如何测试是否抛出异常,例如boost::asio::error::Connection_refused如果服务器不在线?

我浏览了文档,但我仍然感到困惑(boost,c++ 新手)。

仅供参考,我运行了一个BOOST_AUTO_TEST_CASE,其中包含一个构造函数,用于设置 IP 地址和端口号并连接到服务器。当我运行BOOST_AUTO_TEST 时,如果服务器处于脱机状态并且没有检测到错误,我会得到预期的异常,但我想我的问题是如果我能够在没有它们的情况下进行测试,BOOST_CHECK_THROWBOOST_WARN_THROW 将如何发挥作用。

【问题讨论】:

  • 完全清楚你想要达到什么。据我了解您的问题,您已经设法编写了一个测试用例,该用例在尝试连接到离线服务器时成功获得了预期的异常。那你的问题是什么?
  • 感谢您的回复阿恩。我在没有使用 BOOST_CHECK_THROW 或 BOOST_WARN_THROW 的情况下运行了我的测试,我想知道这些东西是否有必要?如果我可以运行测试,在不使用 BOOST_CHECK_Throw 等的情况下获得异常而不会失败,它们有什么用。
  • 哦,我现在可以猜测您的代码是什么样子(您尝试/捕获“手动”并在捕获到正确的异常时成功,对吧?),但是如果您很乐意提供它,我们可以告诉您内置 boost 宏的优点是什么。我假设您没有足够的代表来自己编辑问题,所以只需给我们一个指向 SSCCE 的 pastebin 链接,我们会为您编辑它
  • @ArneMertz 他不需要代表来编辑他自己的问题。

标签: c++ unit-testing boost


【解决方案1】:

由于我只能猜测您当前的代码是什么样的,我将提供一个示例,说明您的测试用例在BOOST_CHECK_THROW 下的外观:

BOOST_AUTO_TEST_CASE(testMissingServer) {
  MyClient client;
  BOOST_CHECK_THROW(
    client.connect(someNonexistentServerIP, somePort), 
    boost::asio::error::Connection_refused
  );
}

手动执行此操作将如下所示:

BOOST_AUTO_TEST_CASE(testMissingServer) {
  MyClient client;
  try {
    client.connect(someNonexistentServerIP, somePort);
    BOOST_ERROR("client.connect(someNonexistentServerIP, somePort) did not throw anything. Expected a boost::asio::error::Connection_refused");
  } catch(boost::asio::error::Connection_refused const&) {
    //ok, this is the expected case
  } catch(...) {
    BOOST_ERROR("client.connect(someNonexistentServerIP, somePort) did throw an unkown exception, but expected a boost::asio::error::Connection_refused");
  }

}

您会发现这更加繁琐,因为您必须分别检查错误的异常和没有异常。 BOOST_CHECK_THROW 不仅提供了更简洁、更易读的测试用例,如果没有抛出您期望的异常,它还会生成有意义的失败消息。

【讨论】:

  • 感谢 Arne 的解释
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-23
  • 1970-01-01
  • 2018-03-24
  • 2013-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多