#include #include #define BOOST_TEST_MODULE tests #define BOOST_TEST_DYN_LINK #include // The class I am trying to test. class person { public: person() : name_() {}; void name(const std::string & name) { name_ = name; updated(*this); }; boost::signal updated; private: std::string name_; }; // A mock handler for handling a person.updated event. struct mock_handler { mock_handler(const person & subject) : has_been_called_(false), subject_(subject) {}; // Handler. void operator()(const person & subject) { BOOST_TEST_MESSAGE("in mock_handler::operator()"); has_been_called_ = true; BOOST_CHECK_EQUAL(&subject == &subject_, true); }; // This handler must be called before it goes out of scope. ~mock_handler() { BOOST_TEST_MESSAGE("in mock_handler::~mock_handler()"); BOOST_CHECK_EQUAL(has_been_called_, true); }; private: bool has_been_called_; const person & subject_; }; BOOST_AUTO_TEST_SUITE(person_tests) // Test that setting a new name triggers the person.updated signal. BOOST_AUTO_TEST_CASE(setting_name_triggers_update_signal) { BOOST_TEST_MESSAGE("entered test"); person subject; mock_handler handler(subject); subject.updated.connect(handler); subject.name("Richard"); BOOST_TEST_MESSAGE("exiting test"); } BOOST_AUTO_TEST_SUITE_END()