【问题标题】:Boost test: catch user defined exceptionsBoost 测试:捕获用户定义的异常
【发布时间】:2011-02-24 06:56:01
【问题描述】:

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

我如何强制这段代码总是抛出异常? 这似乎是一件有用的事情。以防将来代码更改导致代码 通过并且不抛出异常,我想知道。

【问题讨论】:

    标签: c++ unit-testing boost


    【解决方案1】:

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

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

    重点是我的。

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

    从他们的expected failures spec获取一个sn-p:

    BOOST_AUTO_TEST_CASE_EXPECTED_FAILURES( my_test1, 1 )
    
    BOOST_AUTO_TEST_CASE( my_test1 )
    {
        BOOST_CHECK( 2 == 1 );
    }
    

    将导致输出

    test.cpp(10):“my_test1”中的错误:检查 2 == 1 失败 测试套件“示例”通过: 1 个断言中的 1 个断言失败 预计有 1 次失败 1 个测试用例中的 1 个通过

    如您所见,尽管断言失败,但由于使用了预期的失败,测试用例仍然通过。


    因此,如果您需要验证某些东西是否引发了异常,您可以使用如下代码:

    BOOST_AUTO_TEST_CASE(invalid_operation_should_throw_custom_exception)
    {
        MyObj obj;
        BOOST_REQUIRE_THROW(obj.invalid_operation(), CustomException);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-23
      • 2020-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多