我正在尝试在客户端服务器N / W上执行升压单元测试。
我如何测试是否抛出异常,例如boost::asio::error::Connection_refused
如果服务器不在线?
我查看了文档并且仍然感到困惑(boost,c ++ newbie)。
仅供参考我运行了BOOST_AUTO_TEST_CASE
,其中包含一个构造函数,用于设置ip地址和端口号并连接到服务器。当我运行BOOST_AUTO_TEST
时,如果服务器处于脱机状态并且没有检测到错误,我会收到预期的异常,但我想我的问题如果我能够BOOST_CHECK_THROW
或BOOST_WARN_THROW
如何进入Play状态没有它们进行测试。
答案 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
不仅提供了更简洁,更易读的测试用例,如果没有抛出您期望的异常,它还会产生有意义的失败消息。