2010-08-15 215 views

回答

2

我还没有尝试过这个,但理论上你想在check_impl function(在boost_unit_test_library源文件中)某处设置一个断点,可能在其最后一个case语句的非PASS情况下。

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

需要注意的是一个失败BOOST_REQUIRE导致抛出,因此,如果您启用VS”突破上-C++ - 例外的是会很好(但不是BOOST_CHECK S于那些打破调试选项,这只是返回并进行)。

+0

谢谢。我还发现按照Boost.Test文档的“Microsoft Visual Studio .NET用户特定”一章中所述的过程很有用。它允许在验证失败的地方手动设置断点。 – 2010-08-18 11:01:09

1

我按照@timday的建议在check_impl()中加入了断点。

下面是升压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 
} 
+0

这似乎并没有在提升1.63。 test_tool.ipp中的错误报告似乎发生在一个单独的线程中,或者在最后,当所有测试已经被检查时发生。我想停止何时发生断言。 – CygnusX1 2017-07-14 08:12:40

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()); 
    }