2010-08-15 4 views

Antwort

2

Ich habe das selbst nicht versucht, aber in der Theorie würden Sie einen Haltepunkt irgendwo in der check_impl function (in der boost_unit_test_library Quelle) wahrscheinlich in den Nicht-Pass-Fällen seiner endgültigen Fallanweisung setzen.

In der Praxis finde ich immer nur die Tests (oder den spezifischen Problemtest, ausgewählt mit --run_test = ...) mit einem Haltepunkt auf der fehlerhaften Prüfung.

Hinweis, dass ein Fehler BOOST_REQUIRE Ergebnisse in einem Wurf, also wenn Sie ermöglichen VS‘Break-on-C++ - Ausnahmen in den Debugging-Optionen, die gut auf diejenigen brechen werden (aber nicht BOOST_CHECK s, die gerade zurückkommen und tragen).

+0

Danke. Ich fand es auch nützlich, das im Kapitel "Microsoft Visual Studio .NET-Benutzer" der Boost.Test-Dokumentation beschriebene Verfahren zu befolgen. Es ermöglicht, manuell einen Haltepunkt an der Stelle zu setzen, an der eine Überprüfung fehlschlägt. –

1

Ich setze Haltepunkte in check_impl(), wie von @timday vorgeschlagen. Hier

ist ein Auszug aus Boost-1.57.0, Datei boost/test/impl/test_tool.ipp, Zeilen 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

Dies scheint in Boost 1.63 nicht zu funktionieren. Das Melden von Fehlern in test_tool.ipp scheint in einem separaten Thread zu erfolgen, oder irgendwie am Ende, wenn alle Tests bereits überprüft wurden. Ich möchte anhalten, wenn die Assertion stattdessen auftritt. – CygnusX1

0

assertion.hpp

Template-Klasse 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()); 
    } 
Verwandte Themen