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

模拟服务器

开发平台:

C/C++

  1. #ifndef CPPUNIT_TESTCASE_H
  2. #define CPPUNIT_TESTCASE_H
  3. #include <string>
  4. #ifndef CPPUNIT_GUARDS_H
  5. #include "Guards.h"
  6. #endif
  7. #ifndef CPPUNIT_TEST_H
  8. #include "Test.h"
  9. #endif
  10. #ifndef CPPUNIT_CPPUNITEXCEPTION_H
  11. #include "CppUnitException.h"
  12. #endif
  13. class TestResult;
  14. /*
  15.  * A test case defines the fixture to run multiple tests. To define a test case
  16.  * 1) implement a subclass of TestCase
  17.  * 2) define instance variables that store the state of the fixture
  18.  * 3) initialize the fixture state by overriding setUp
  19.  * 4) clean-up after a test by overriding tearDown.
  20.  *
  21.  * Each test runs in its own fixture so there
  22.  * can be no side effects among test runs.
  23.  * Here is an example:
  24.  * 
  25.  * class MathTest : public TestCase {
  26.  *     protected: int m_value1;
  27.  *     protected: int m_value2;
  28.  *
  29.  *     public: MathTest (string name)
  30.  *                 : TestCase (name) {
  31.  *     }
  32.  *
  33.  *     protected: void setUp () {
  34.  *         m_value1 = 2;
  35.  *         m_value2 = 3;
  36.  *     }
  37.  * }
  38.  * 
  39.  *
  40.  * For each test implement a method which interacts
  41.  * with the fixture. Verify the expected results with assertions specified
  42.  * by calling assert on the expression you want to test:
  43.  * 
  44.  *    protected: void testAdd () {
  45.  *        int result = value1 + value2;
  46.  *        assert (result == 5);
  47.  *    }
  48.  * 
  49.  * Once the methods are defined you can run them. To do this, use
  50.  * a TestCaller.
  51.  *
  52.  * Test *test = new TestCaller<MathTest>("testAdd", MathTest::testAdd);
  53.  * test->run ();
  54.  *
  55.  *
  56.  * The tests to be run can be collected into a TestSuite. CppUnit provides
  57.  * different test runners which can run a test suite and collect the results.
  58.  * The test runners expect a static method suite as the entry
  59.  * point to get a test to run.
  60.  * 
  61.  * public: static MathTest::suite () {
  62.  *      TestSuite *suiteOfTests = new TestSuite;
  63.  *      suiteOfTests->addTest(new TestCaller<MathTest>("testAdd", testAdd));
  64.  *      suiteOfTests->addTest(new TestCaller<MathTest>("testDivideByZero", testDivideByZero));
  65.  *      return suiteOfTests;
  66.  *  }
  67.  * 
  68.  * Note that the caller of suite assumes lifetime control
  69.  * for the returned suite.
  70.  *
  71.  * see TestResult, TestSuite and TestCaller
  72.  *
  73.  */
  74. class TestCase : public Test 
  75. {
  76.     REFERENCEOBJECT (TestCase)
  77. public:
  78.                         TestCase         (std::string Name);
  79.                         ~TestCase        ();
  80.     virtual void        run              (TestResult *result);
  81.     virtual TestResult  *run             ();
  82.     virtual int         countTestCases   ();
  83.     std::string         name             ();
  84.     std::string         toString         ();
  85.     virtual void        setUp            ();
  86.     virtual void        tearDown         ();
  87. protected:
  88.     virtual void        runTest          ();
  89.     TestResult          *defaultResult   ();
  90.     void                assertImplementation 
  91.                                          (bool         condition, 
  92.                                           std::string  conditionExpression = "",
  93.                                           long         lineNumber = CPPUNIT_UNKNOWNLINENUMBER,
  94.                                           std::string  fileName = CPPUNIT_UNKNOWNFILENAME);
  95.     void                assertEquals     (long         expected, 
  96.                                           long         actual,
  97.                                           long         lineNumber = CPPUNIT_UNKNOWNLINENUMBER,
  98.                                           std::string  fileName = CPPUNIT_UNKNOWNFILENAME);
  99.     void                assertEquals     (double       expected, 
  100.                                           double       actual, 
  101.                                           double       delta, 
  102.                                           long         lineNumber = CPPUNIT_UNKNOWNLINENUMBER,
  103.                                           std::string  fileName = CPPUNIT_UNKNOWNFILENAME);
  104.     std::string         notEqualsMessage (long         expected, 
  105.                                           long         actual);
  106.     std::string         notEqualsMessage (double       expected, 
  107.                                           double       actual);
  108.     
  109. private:
  110.     const std::string   m_name;
  111. };
  112. // Constructs a test case
  113. inline TestCase::TestCase (std::string name) 
  114. : m_name (name) 
  115. {}
  116. // Destructs a test case
  117. inline TestCase::~TestCase ()
  118. {}
  119. // Returns a count of all the tests executed
  120. inline int TestCase::countTestCases ()
  121. { return 1; }
  122. // Returns the name of the test case
  123. inline std::string TestCase::name ()
  124. { return m_name; }
  125. // A hook for fixture set up
  126. inline void TestCase::setUp ()
  127. {}
  128. // A hook for fixture tear down
  129. inline void TestCase::tearDown ()
  130. {}
  131. // Returns the name of the test case instance
  132. inline std::string TestCase::toString ()
  133. { const type_info& thisClass = typeid (*this); return std::string (thisClass.name ()) + "." + name (); }
  134. // A set of macros which allow us to get the line number
  135. // and file name at the point of an error.
  136. // Just goes to show that preprocessors do have some
  137. // redeeming qualities.
  138. #define CPPUNIT_SOURCEANNOTATION
  139. #ifdef CPPUNIT_SOURCEANNOTATION
  140.     #undef assert
  141.     #define assert(condition)
  142.     (this->assertImplementation ((condition),(#condition),
  143.         __LINE__, __FILE__))
  144. #else
  145.     #undef assert
  146.     #define assert(condition)
  147.     (this->assertImplementation ((condition),"",
  148.         __LINE__, __FILE__))
  149. #endif
  150. // Macros for primitive value comparisons
  151. #define assertDoublesEqual(expected,actual,delta)
  152. (this->assertEquals ((expected),
  153.         (actual),(delta),__LINE__,__FILE__))
  154. #define assertLongsEqual(expected,actual)
  155. (this->assertEquals ((expected),
  156.         (actual),__LINE__,__FILE__))
  157. #endif