/** * @file kc_ut.h * @brief KC 単体テスト用モジュール * @copyright 2003 - 2023 Nomura Kei * @depends * kc.h */ #ifndef KC_UT_H #define KC_UT_H #include <kc.h> #ifdef __cplusplus extern "C" { namespace kc { using namespace std; #endif /** * 関数種別。 */ typedef enum { UT_TESTCASE, //!< テストケース UT_SETUP, //!< 事前処理 UT_TEARDOWN, //!< 事後処理 UT_OTHER //!< その他 } UtType; /** * UT実施用構造体 * * @code * KcUt* ut = KcUt_get_instance(); * ut->add(ut, UT_SETUP, "事前処理", UtList_setup) * ut->add(ut, UT_TESTCASE, "リスト追加", UtList_add); * ut->add(ut, UT_SETUP, "事後処理", UtList_teardown) * * ut->add(ut, UT_SETUP, "事前処理", UtList_setup) * ut->add(ut, UT_TESTCASE, "リストクリア", UtList_clear); * ut->add(ut, UT_SETUP, "事後処理", UtList_teardown) * * ut->run(); * @endcode */ typedef struct KcUt_ { /** * テストケースまたは、事前処理/事後処理の関数を追加します。 * * @param ut 単体テスト用インスタンス * @param type タイプ(UT_TESTCASE/UT_SETUP/UT_TEARDOWN/UT_OTHER) * @param title タイトル * @param func 追加する関数 */ void (*add)(struct KcUt_ *ut, UtType type, const char *title, void (*func)(void)); /** * テストケースを実行します。 * * @param ut 単体テスト用インスタンス */ void (*run)(struct KcUt_ *ut); /** * 内部で扱うための情報格納用 */ void *_info; } KcUt; /** * 単体テスト用のインスタンスを生成します。 */ KcUt *KcUt_get_instance(void); #ifdef __cplusplus } // namespace kc } // extern "C" #endif #endif // KC_UT_H