【问题标题】:Boost unit testing and catching exceptions促进单元测试和捕获异常
【发布时间】:2015-04-09 15:33:35
【问题描述】:

我们的代码会抛出 std::runtime_error,并且我们正在使用 Boost 单元测试框架。

目前我们正在使用BOOST_CHECK_THROW。不幸的是,这不会检查what 消息。

是否有 BOOST_CHECK_THROW 版本可以检查是否引发了异常以及该异常是否具有正确的消息?

【问题讨论】:

    标签: c++ unit-testing boost


    【解决方案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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-02
      • 2021-07-29
      • 2015-10-10
      • 2017-01-19
      • 1970-01-01
      相关资源
      最近更新 更多