/* ============================================================================= * scpp_unittest.cpp * 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 * ============================================================================= * * 単体試験用モジュール. * */ #include <iostream> #include <iomanip> #include <sstream> #include <string> #include <scpp_unittest.hpp> namespace scpp { //////////////////////////////////////////////////////////////////////////////// // // TestCase // /** * テストケースクラスを生成します. * テスト実行時に一度だけ初期化が必要な処理を行います. */ TestCase::TestCase() { // NOP }; /** * テストケースクラスを破棄します. */ TestCase::~TestCase() { // NOP } /** * 各テストを実行する前に実行される setUp 関数です. * * 各テストクラスは, 本メソッドをオーバーライドして, * 各テスト実行前に実施する処理を記述してください. */ void TestCase::setUp() { // NOP } /** * 各テストを実行した後に実行される tearDown 関数です. * * 各テストクラスは, 本メソッドをオーバーライドして, * 各テスト実行後に実施する処理を記述してください. */ void TestCase::tearDown() { // NOP } //////////////////////////////////////////////////////////////////////////////// // // UnittestManager // /** * テスト管理. * 本クラスのインスタンスは, 一応複数生成できますが, * あらかじめインスタンス utManager が用意されています. */ UnittestManager::UnittestManager() : okCount(0), ngCount(0) { // NOP } /** * テスト管理破棄. */ UnittestManager::~UnittestManager() { // NOP printResult(); } /** * テストの結果を追加します. * * @param file ファイル * @param line 行番号 * @param func 関数 * @param result 結果 * @param e AssertError */ void UnittestManager::addTestResult(const char* file, int line, const char* func, bool result, const AssertError* e) throw() { std::ostringstream msg; msg << file << ":" << line << " (" << func << ")"; std::string msgStr(msg.str()); std::cout << "[" << std::setw(5) << std::setfill('0') << std::right << (okCount + ngCount + 1) << "] "; std::cout << std::setw(64) << std::setfill(' ') << std::left << msgStr; if (result) { std::cout << " [ OK ]" << std::endl; okCount++; } else { std::cout << " [ NG ]" << std::endl; if (e != 0) { std::cout << "AssertError: " << e->what() << std::endl; std::cout << " at " << e->getFileName() << ":" << e->getLineNumber() << " (" << e->getFunctionName() << ")" << std::endl; } ngCount++; } } /** * 単体テストの結果を出力します. */ void UnittestManager::printResult() { std::cout << "--------------------------------------------------------------------------------" << std::endl; std::cout << " OK : " << okCount << std::endl; std::cout << " NG : " << ngCount << std::endl; std::cout << " Total : " << (okCount + ngCount) << std::endl; std::cout << std::endl; } UnittestManager utManager; } // namespace scpp