/* ============================================================================= * scpp_unittest.hpp * Copyright (c) 2003 - 2011 Nomura Kei * LICENSE : * LGPL (GNU Lesser General General Public License - Version 3,29 June 2007) * http://www.gnu.org/copyleft/lesser.html * ============================================================================= * * 単体試験用モジュール. * */ #ifndef SCPP_UNITTEST_HPP #define SCPP_UNITTEST_HPP #include <vector> #include <scpp_assert.hpp> #define RUN_TEST(func) { \ setUp(); \ try { \ func(); \ scpp::utManager.addTestResult(__FILE__, __LINE__, #func, true); \ } catch (scpp::AssertError& e) { \ scpp::utManager.addTestResult(__FILE__, __LINE__, #func, false, &e); \ } catch (...) { \ scpp::utManager.addTestResult(__FILE__, __LINE__, #func, false); \ } \ tearDown(); \ } namespace scpp { /** * テストケース. * 各テストクラスは, 本クラスを継承して作成してください. * * 以下に実装例を示します. * * @code * #include <scpp_unittest.hpp> * * using namespace scpp; * class SampleTest : public TestCase * { * public: * SampleTest() {} * ~SampleTest() {} * void setUp() * { * // 各テストケース実行前に実施する内容を記述する * } * void tearDown() * { * // 各テストケース実行後に実施する内容を記述する * } * void testSampe1() * { * // テスト内容を記述する * std::sring tmp("ABC"); * Assertion::assertEquals("ABC", tmp); * } * void testSample2() * { * // 何らかのテスト * } * void suite() * { * RUN_TEST(testSample1); * RUN_TEST(testSample2); * } * }; * * * @endcode */ class TestCase { public: TestCase(); virtual ~TestCase(); virtual void setUp(); virtual void tearDown(); virtual void suite() = 0; }; /** * 単体試験を管理するクラス. * 本クラスは単体テストにて使用されます. * 通常, 本クラスのインスタンスを生成する必要はありません. */ class UnittestManager { public: UnittestManager(); virtual ~UnittestManager(); void addTestResult(const char* file, int line, const char* func, bool result, const AssertError* e = 0) throw(); void printResult(); private: int okCount; int ngCount; }; extern UnittestManager utManager; } // namespace scpp #endif // SCPP_UNITTEST_HPP