Newer
Older
snipet / project / trunk / include / sc / scpp_unittest.hpp
  1. /* =============================================================================
  2. * scpp_exception.hpp
  3. * Copyright (c) 2003 - 2013 Nomura Kei
  4. * =============================================================================
  5. */
  6. #ifndef SCPP_UNITTEST_HPP
  7. #define SCPP_UNITTEST_HPP
  8. #ifdef __cplusplus
  9.  
  10. #ifndef SCPP_ASSERT_HPP
  11. #include <scpp_assert.hpp>
  12. #endif
  13.  
  14. #define RUN_TEST(func) { \
  15. setUp(); \
  16. try { \
  17. func(); \
  18. scpp::utManager.addTestResult(__FILE__, __LINE__, #func, true); \
  19. } catch (scpp::AssertError& e) { \
  20. scpp::utManager.addTestResult(__FILE__, __LINE__, #func, false, &e); \
  21. } catch (...) { \
  22. scpp::utManager.addTestResult(__FILE__, __LINE__, #func, false); \
  23. } \
  24. tearDown(); \
  25. }
  26.  
  27.  
  28. namespace scpp
  29. {
  30.  
  31.  
  32. /**
  33. * テストケース.
  34. * 各テストクラスは, 本クラスを継承して作成してください.
  35. *
  36. * 以下に実装例を示します.
  37. *
  38. * @code
  39. * #include <scpp_unittest.hpp>
  40. *
  41. * using namespace scpp;
  42. * class SampleTest : public TestCase
  43. * {
  44. * public:
  45. * SampleTest() {}
  46. * ~SampleTest() {}
  47. * void setUp()
  48. * {
  49. * // 各テストケース実行前に実施する内容を記述する
  50. * }
  51. * void tearDown()
  52. * {
  53. * // 各テストケース実行後に実施する内容を記述する
  54. * }
  55. * void testSampe1()
  56. * {
  57. * // テスト内容を記述する
  58. * std::sring tmp("ABC");
  59. * Assertion::assertEquals("ABC", tmp);
  60. * }
  61. * void testSample2()
  62. * {
  63. * // 何らかのテスト
  64. * }
  65. * void suite()
  66. * {
  67. * RUN_TEST(testSample1);
  68. * RUN_TEST(testSample2);
  69. * }
  70. * };
  71. *
  72. *
  73. * @endcode
  74. */
  75. class TestCase
  76. {
  77. public:
  78. TestCase();
  79. virtual ~TestCase();
  80. virtual void setUp();
  81. virtual void tearDown();
  82. virtual void suite() = 0;
  83.  
  84. };
  85.  
  86.  
  87. /**
  88. * 単体試験を管理するクラス.
  89. * 本クラスは単体テストにて使用されます.
  90. * 通常, 本クラスのインスタンスを生成する必要はありません.
  91. */
  92. class UnittestManager
  93. {
  94. public:
  95. UnittestManager();
  96. virtual ~UnittestManager();
  97. void addTestResult(const char* file, int line, const char* func, bool result, const AssertError* e = 0) NO_THROW();
  98. void printResult();
  99. private:
  100. int okCount;
  101. int ngCount;
  102.  
  103. };
  104.  
  105. extern UnittestManager utManager;
  106.  
  107.  
  108. } // namespace scpp
  109.  
  110. #endif /* __cplusplus */
  111. #endif /* SCPP_UNITTEST_HPP */
  112.