Boost测试:捕获用户定义的异常

时间:2010-05-26 16:32:46

标签: c++ unit-testing boost

如果我的代码中有用户定义的异常,我就无法进行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条款。

如何强制执行该段代码应始终抛出异常? 这似乎是一件有用的事情。如果将来代码更改导致代码 传递并且不抛出异常,我想知道。

1 个答案:

答案 0 :(得分:8)

EXPECTED_FAILURES指的是针对BOOST_REQUIRE或其他断言的失败。文件明确指出:

  

该功能不用于检查预期的功能故障。 要检查特定输入是否导致异常被抛出,请使用BOOST_CHECK_THROW系列测试工具。

重点是我的。

当断言失败但您想暂时忽略它时,预期的失败意味着在测试期间用作临时解决方法。

从他们的expected failures spec

获取一个片段
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);
}