Boost.Test应用程序调试

时间:2010-08-15 10:03:10

标签: c++ unit-testing visual-studio-2010 boost

在VS2010(VS2008)中调试C ++ Boost.Test应用程序时,如何使调试器停止在Boost.Test断言失败点?

3 个答案:

答案 0 :(得分:2)

我自己没有尝试过,但从理论上讲,你想在check_impl function(在boost_unit_test_library源代码中)的某个地方设置一个断点,可能是在最终case语句的非PASS情况下。

在实践中,我总是发现自己只是在违规检查中使用断点再次运行测试(或使用--run_test = ...选择的特定问题测试)。

请注意,失败的BOOST_REQUIRE会导致抛出,因此如果启用VS'break-on-C ++ - 调试选项中的异常将会很好地破坏(但不是BOOST_CHECK s ,它只是返回并继续)。

答案 1 :(得分:1)

我在check_impl()中设置了断点,正如@timday所建议的那样。

以下是Boost 1.57.0的摘录,文件boost/test/impl/test_tool.ipp,第355至373行:

switch( tl ) {
case PASS:
    framework::assertion_result( true );
    return true;

case WARN:
    return false; // ADD BREAKPOINT HERE

case CHECK:
    framework::assertion_result( false );
    return false; // ADD BREAKPOINT HERE

case REQUIRE:
    framework::assertion_result( false );

    framework::test_unit_aborted( framework::current_test_case() );

    throw execution_aborted(); // ADD BREAKPOINT HERE
}

答案 2 :(得分:0)

assertion.hpp

模板类binary_expr:

assertion_result            evaluate( bool no_message = false ) const
    {
        assertion_result const expr_res( value() );
        if( no_message || expr_res )
            return expr_res;   <<<<<<<<  SUCCESS

BRK        wrap_stringstream buff;
        report( buff.stream() );

        return tt_detail::format_assertion_result( buff.stream().str(), expr_res.message() );
    }