2010-08-15 9 views

risposta

2

Non l'ho provato da solo, ma in teoria si vorrebbe impostare un punto di interruzione da qualche parte nel check_impl function (nella fonte boost_unit_test_library), probabilmente nei casi non PASS della sua dichiarazione caso finale.

In pratica mi ritrovo sempre solo a eseguire nuovamente i test (o il test del problema specifico, selezionato con --run_test = ...) con un punto di interruzione sul controllo offendente.

Si noti che un difetto BOOST_REQUIRE risultati in un tiro, quindi se si attiva VS' break-on-C++ - eccezioni nelle opzioni di debug che ti rompono su quelli ben (ma non BOOST_CHECK s, che ha appena tornare e portare avanti).

+0

Grazie. Ho anche trovato utile seguire la procedura descritta nel capitolo "Utenti specifici di Microsoft Visual Studio. NET" della documentazione di Boost.Test. Consente di impostare manualmente un punto di interruzione nel punto in cui una verifica non riesce. –

1

Inserisco i breakpoint in check_impl(), come suggerito da @timday.

Ecco un estratto da Boost 1.57.0, file di boost/test/impl/test_tool.ipp, le linee 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

Questo non sembra funzionare nella spinta 1.63. La segnalazione di errori in test_tool.ipp sembra avvenire in un thread separato o in qualche modo alla fine, quando tutti i test erano già stati verificati. Vorrei fermarmi quando invece si verifica l'affermazione. – CygnusX1

0

assertion.hpp

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