2010-08-15 15 views

Respuesta

2

No he intentado esto por mí mismo, pero en teoría querría establecer un punto de interrupción en el check_impl function (en la fuente boost_unit_test_library), probablemente en los casos que no son PASS de su declaración de caso final.

En la práctica, siempre acabo de volver a ejecutar las pruebas (o la prueba de problema específico, seleccionada con --run_test = ...) con un punto de interrupción en la comprobación ofensiva.

Tenga en cuenta que un defecto BOOST_REQUIRE resultados en un tiro, por lo que si se habilita VS' break-en-C++ - excepciones en las opciones de depuración que va a romper en los que muy bien (pero no BOOST_CHECK s, que acaba de regresar y continuar)

+0

Gracias. También me pareció útil seguir el procedimiento descrito en el capítulo "Específicos de los usuarios de Microsoft Visual Studio .NET" de la documentación de Boost.Test. Permite establecer un punto de interrupción de forma manual en el lugar donde falla la verificación. –

1

Puse puntos de corte en check_impl(), según lo sugerido por @timday.

Aquí es un extracto de Boost 1.57.0, archivo boost/test/impl/test_tool.ipp, las líneas 355 a 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

Esto no parece funcionar en boost 1.63. El informe de errores en test_tool.ipp parece ocurrir en un hilo separado, o de alguna manera al final, cuando todas las pruebas ya fueron verificadas. Me gustaría detenerme cuando la afirmación ocurra en su lugar. – CygnusX1

0

assertion.hpp

plantilla de clase 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()); 
    } 
Cuestiones relacionadas