TestResult.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:5k
源码类别:

模拟服务器

开发平台:

C/C++

  1. #ifndef CPPUNIT_TESTRESULT_H
  2. #define CPPUNIT_TESTRESULT_H
  3. #include <vector>
  4. #ifndef CPPUNIT_GUARDS_H
  5. #include "Guards.h"
  6. #endif
  7. #ifndef CPPUNIT_TESTFAILURE_H
  8. #include "TestFailure.h"
  9. #endif
  10. class CppUnitException;
  11. class Test;
  12. /*
  13.  * A TestResult collects the results of executing a test case. It is an 
  14.  * instance of the Collecting Parameter pattern.
  15.  *
  16.  * The test framework distinguishes between failures and errors.
  17.  * A failure is anticipated and checked for with assertions. Errors are
  18.  * unanticipated problems signified by exceptions that are not generated
  19.  * by the framework.
  20.  *
  21.  * TestResult supplies a template method 'setSynchronizationObject ()'
  22.  * so that subclasses can provide mutual exclusion in the face of multiple
  23.  * threads.  This can be useful when tests execute in one thread and
  24.  * they fill a subclass of TestResult which effects change in another 
  25.  * thread.  To have mutual exclusion, override setSynchronizationObject ()
  26.  * and make sure that you create an instance of ExclusiveZone at the 
  27.  * beginning of each method.
  28.  *
  29.  * see Test
  30.  */
  31. class TestResult
  32. {
  33.     REFERENCEOBJECT (TestResult)
  34. public:
  35.                                         TestResult  ();
  36.     virtual                             ~TestResult ();
  37.     virtual void                        addError       (Test *test, CppUnitException *e);
  38.     virtual void                        addFailure     (Test *test, CppUnitException *e);
  39.     virtual void                        startTest      (Test *test);
  40.     virtual void                        endTest        (Test *test);
  41.     virtual int                         runTests       ();
  42.     virtual int                         testErrors     ();
  43.     virtual int                         testFailures   ();
  44.     virtual bool                        wasSuccessful  ();
  45.     virtual bool                        shouldStop     ();
  46.     virtual void                        stop           ();
  47.     virtual std::vector<TestFailure *>& errors         ();
  48.     virtual std::vector<TestFailure *>& failures       ();
  49.     class SynchronizationObject
  50.     {
  51.     public:
  52.                                 SynchronizationObject  () {}
  53.         virtual                 ~SynchronizationObject () {}
  54.         virtual void            lock                   () {}
  55.         virtual void            unlock                 () {}
  56.     };
  57.     class ExclusiveZone
  58.     {
  59.         SynchronizationObject   *m_syncObject;
  60.     public:
  61.                                 ExclusiveZone (SynchronizationObject *syncObject) 
  62.                                 : m_syncObject (syncObject) 
  63.                                 { m_syncObject->lock (); }
  64.                                 ~ExclusiveZone () 
  65.                                 { m_syncObject->unlock (); }
  66.     };
  67. protected:
  68.     virtual void                setSynchronizationObject (SynchronizationObject *syncObject);
  69.     std::vector<TestFailure *>  m_errors;
  70.     std::vector<TestFailure *>  m_failures;
  71.     int                         m_runTests;
  72.     bool                        m_stop;
  73.     SynchronizationObject       *m_syncObject;
  74. };
  75. // Construct a TestResult
  76. inline TestResult::TestResult ()
  77. : m_syncObject (new SynchronizationObject ())
  78. { m_runTests = 0; m_stop = false; }
  79. // Adds an error to the list of errors. The passed in exception
  80. // caused the error
  81. inline void TestResult::addError (Test *test, CppUnitException *e)
  82. { ExclusiveZone zone (m_syncObject); m_errors.push_back (new TestFailure (test, e)); }
  83. // Adds a failure to the list of failures. The passed in exception
  84. // caused the failure.
  85. inline void TestResult::addFailure (Test *test, CppUnitException *e)
  86. { ExclusiveZone zone (m_syncObject); m_failures.push_back (new TestFailure (test, e)); }
  87. // Informs the result that a test will be started.
  88. inline void TestResult::startTest (Test *test)
  89. { ExclusiveZone zone (m_syncObject); m_runTests++; }
  90.   
  91. // Informs the result that a test was completed.
  92. inline void TestResult::endTest (Test *test)
  93. { ExclusiveZone zone (m_syncObject); }
  94. // Gets the number of run tests.
  95. inline int TestResult::runTests ()
  96. { ExclusiveZone zone (m_syncObject); return m_runTests; }
  97. // Gets the number of detected errors.
  98. inline int TestResult::testErrors ()
  99. { ExclusiveZone zone (m_syncObject); return m_errors.size (); }
  100. // Gets the number of detected failures.
  101. inline int TestResult::testFailures ()
  102. { ExclusiveZone zone (m_syncObject); return m_failures.size (); }
  103. // Returns whether the entire test was successful or not.
  104. inline bool TestResult::wasSuccessful ()
  105. { ExclusiveZone zone (m_syncObject); return m_failures.size () == 0 && m_errors.size () == 0; }
  106. // Returns a vector of the errors.
  107. inline std::vector<TestFailure *>& TestResult::errors ()
  108. { ExclusiveZone zone (m_syncObject); return m_errors; }
  109. // Returns a vector of the failures.
  110. inline std::vector<TestFailure *>& TestResult::failures ()
  111. { ExclusiveZone zone (m_syncObject); return m_failures; }
  112. // Returns whether testing should be stopped
  113. inline bool TestResult::shouldStop ()
  114. { ExclusiveZone zone (m_syncObject); return m_stop; }
  115. // Stop testing
  116. inline void TestResult::stop ()
  117. { ExclusiveZone zone (m_syncObject); m_stop = true; }
  118. // Accept a new synchronization object for protection of this instance
  119. // TestResult assumes ownership of the object
  120. inline void TestResult::setSynchronizationObject (SynchronizationObject *syncObject)
  121. { delete m_syncObject; m_syncObject = syncObject; }
  122. #endif