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