如果我的代码中有用户定义的异常,我就无法进行Boost测试 将它们视为失败。
例如,
BOOST_AUTO_TEST_CASE_EXPECTED_FAILURES(MyTest,1)
BOOST_AUTO_TEST_CASE(MyTest)
{
// code which throws user defined exception, not derived from std::exception.
}
我收到一条通用信息:
Caught exception: ....
unknown location(0):....
它不会将此错误识别为失败,因为它不是std :: exception。 所以它不遵守expected_failures条款。
如何强制执行该段代码应始终抛出异常? 这似乎是一件有用的事情。如果将来代码更改导致代码 传递并且不抛出异常,我想知道。
答案 0 :(得分:8)
EXPECTED_FAILURES
指的是针对BOOST_REQUIRE
或其他断言的失败。文件明确指出:
该功能不用于检查预期的功能故障。 要检查特定输入是否导致异常被抛出,请使用BOOST_CHECK_THROW系列测试工具。
重点是我的。
当断言失败但您想暂时忽略它时,预期的失败意味着在测试期间用作临时解决方法。
获取一个片段BOOST_AUTO_TEST_CASE_EXPECTED_FAILURES( my_test1, 1 )
BOOST_AUTO_TEST_CASE( my_test1 )
{
BOOST_CHECK( 2 == 1 );
}
将导致输出
test.cpp(10): error in "my_test1": check 2 == 1 failed Test suite "example" passed with: 1 assertions out of 1 failed 1 failures expected 1 test case out of 1 passed
正如您所看到的,尽管断言失败,但由于使用了预期的失败,测试用例仍然通过。
因此,如果您需要验证某些内容是否会引发异常,请使用以下代码:
BOOST_AUTO_TEST_CASE(invalid_operation_should_throw_custom_exception)
{
MyObj obj;
BOOST_REQUIRE_THROW(obj.invalid_operation(), CustomException);
}