增强单元测试异常

时间:2014-02-14 08:35:12

标签: c++ unit-testing boost

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

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

我查看了文档并且仍然感到困惑(boost,c ++ newbie)。

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

1 个答案:

答案 0 :(得分:0)

由于我只能猜测您当前的代码是什么样的,因此我将简要介绍一下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不仅提供了更简洁,更易读的测试用例,如果没有抛出您期望的异常,它还会产生有意义的失败消息。