CppUnit project page | FAQ | CppUnit home page |
#include <TestListener.h>
Inheritance diagram for TestListener:
Public Member Functions | |
virtual | ~TestListener () |
virtual void | startTest (Test *test) |
Called when just before a TestCase is run. | |
virtual void | addFailure (const TestFailure &failure) |
Called when a failure occurs while running a test. | |
virtual void | endTest (Test *test) |
Called just after a TestCase was run (even if a failure occured). | |
virtual void | startSuite (Test *suite) |
Called by a TestComposite just before running its child tests. | |
virtual void | endSuite (Test *suite) |
Called by a TestComposite after running its child tests. | |
virtual void | startTestRun (Test *test, TestResult *eventManager) |
Called by a TestRunner before running the test. | |
virtual void | endTestRun (Test *test, TestResult *eventManager) |
Called by a TestRunner after running the test. |
Implementing the Observer pattern a TestListener may be registered to a TestResult to obtain information on the testing progress. Use specialized sub classes of TestListener for text output (TextTestProgressListener). Do not use the Listener for the test result output, use a subclass of Outputter instead.
The test framework distinguishes between failures and errors. A failure is anticipated and checked for with assertions. Errors are unanticipated problems signified by exceptions that are not generated by the framework.
Here is an example to track test time:
#include <cppunit/TestListener.h> #include <cppunit/Test.h> #include <time.h> // for clock() class TimingListener : public CppUnit::TestListener { public: void startTest( CppUnit::Test *test ) { _chronometer.start(); } void endTest( CppUnit::Test *test ) { _chronometer.end(); addTest( test, _chronometer.elapsedTime() ); } // ... (interface to add/read test timing result) private: Clock _chronometer; };
And another example that track failure/success at test suite level and captures the TestPath of each suite:
class SuiteTracker : public CppUnit::TestListener { public: void startSuite( CppUnit::Test *suite ) { m_currentPath.add( suite ); } void addFailure( const TestFailure &failure ) { m_suiteFailure.top() = false; } void endSuite( CppUnit::Test *suite ) { m_suiteStatus.insert( std::make_pair( suite, m_suiteFailure.top() ) ); m_suitePaths.insert( std::make_pair( suite, m_currentPath ) ); m_currentPath.up(); m_suiteFailure.pop(); } private: std::stack<bool> m_suiteFailure; CppUnit::TestPath m_currentPath; std::map<CppUnit::Test *, bool> m_suiteStatus; std::map<CppUnit::Test *, CppUnit::TestPath> m_suitePaths; };
|
|
|
Called when a failure occurs while running a test.
Reimplemented in BriefTestProgressListener, TestResultCollector, TestSuccessListener, TextTestProgressListener, and TextTestResult. |
|
Called by a TestComposite after running its child tests.
|
|
Called just after a TestCase was run (even if a failure occured).
Reimplemented in BriefTestProgressListener. |
|
Called by a TestRunner after running the test. TextTestProgressListener use this to emit a line break. You can also use this to do some global uninitialisation.
Reimplemented in TextTestProgressListener. |
|
Called by a TestComposite just before running its child tests.
|
|
Called when just before a TestCase is run.
Reimplemented in BriefTestProgressListener, TestResultCollector, TextTestProgressListener, and TextTestResult. |
|
Called by a TestRunner before running the test. You can use this to do some global initialisation. A listener could also use to output a 'prolog' to the test run.
|
hosts this site. |
Send comments to: CppUnit Developers |