我们有抛出std::runtime_error
的代码,我们正在使用Boost单元测试框架。
目前我们正在使用BOOST_CHECK_THROW
。不幸的是,这不会检查what
消息。
是否有BOOST_CHECK_THROW版本可以检查是否已引发异常并且该异常有正确的消息?
答案 0 :(得分:1)
查看BOOST_CHECK_EXCEPTION,它允许您指定抛出的异常的谓词。这是我创建的一个例子:
#define BOOST_TEST_MAIN
#include <boost/test/included/unit_test.hpp>
void fail()
{
throw std::logic_error("some error message");
}
void succeed()
{
}
void wrong_msg()
{
throw std::logic_error("some other error message");
}
bool correctMessage(const std::logic_error& ex)
{
BOOST_CHECK_EQUAL(ex.what(), std::string("some error message"));
return true;
}
BOOST_AUTO_TEST_CASE(case_fail)
{
BOOST_CHECK_EXCEPTION(fail(), std::logic_error, correctMessage);
}
BOOST_AUTO_TEST_CASE(case_succeed)
{
BOOST_CHECK_EXCEPTION(succeed(), std::logic_error, correctMessage);
}
BOOST_AUTO_TEST_CASE(case_wrong_msg)
{
BOOST_CHECK_EXCEPTION(wrong_msg(), std::logic_error, correctMessage);
}
输出:
Running 3 test cases...
testUnitTest.cpp(31): error in "case_succeed": exception std::logic_error is expected
testUnitTest.cpp(20): error in "case_wrong_msg": check ex.what() == std::string("some error message") failed [some other error message != some error message]
*** 2 failures detected in test suite "Master Test Suite"