diff --git a/src/libraries/turtle/expectation.hpp b/src/libraries/turtle/expectation.hpp index cb286d7..fc3a8c4 100644 --- a/src/libraries/turtle/expectation.hpp +++ b/src/libraries/turtle/expectation.hpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include @@ -59,11 +60,12 @@ namespace mock virtual ~expectation() { parent_->remove( *this ); - for( matchers_cit it = matchers_.begin(); - it != matchers_.end(); ++it ) - if( valid_ && ! it->verify() ) - ErrorPolicy::untriggered_expectation( - context(), it->file(), it->line() ); + if( ! std::uncaught_exception() ) + for( matchers_cit it = matchers_.begin(); + it != matchers_.end(); ++it ) + if( valid_ && ! it->verify() ) + ErrorPolicy::untriggered_expectation( + context(), it->file(), it->line() ); } expectation& set_name( const std::string& name ) diff --git a/src/tests/turtle_test/expectation_test.cpp b/src/tests/turtle_test/expectation_test.cpp index f3afde4..08b4f40 100644 --- a/src/tests/turtle_test/expectation_test.cpp +++ b/src/tests/turtle_test/expectation_test.cpp @@ -760,3 +760,15 @@ BOOST_FIXTURE_TEST_CASE( adding_a_matcher_reactivates_the_verification_upon_dest e.expect().once(); untriggered_expectation_exp.expect().once(); } + +BOOST_FIXTURE_TEST_CASE( throwing_an_exception_disables_the_automatic_verification_upon_destruction, error_guard ) +{ + try + { + mock::expectation< void(), mock_error > e; + e.expect().once(); + throw std::exception(); + } + catch( std::exception& ) + {} +}