C言語版のテストフレームワークでも、Google Test のようにテストの登録をいちいちしなくていいインターフェイスを目指していました。
それを実現するためには、どうしても main 関数が呼ばれる前に関数を呼ぶ必要がありました。
C++ なら、
int dummy = func(); int main() { return 0; }
C だと、上の方法が使えず。(いけると思っていたのでガッカリ)
もちろんコンストラクタなどないので、どうしたもんかという状態でした。
__attribute__((constructor))
Google 先生に聞いてみると __attribute__((constructor)) ってのがヒット。これだ!えいや!できたー!!
あ、でもコレ GCC でないとダメじゃん。
あきらめるのはまだ早い
gcc には __attribute__((constructor)) というものがあるが、Visual Studio ではどうしたらいいの?という事で、Google で検索してみると以下の記事がヒットしました。
http://stackoverflow.com/questions/1113409/attribute-constructor-equivalent-in-vc
まんま答えがありました。 CRT$XCU を使うようです。
CRT のグローバル初期化にぶち込むってことですかね。
MSDNにも説明がありました。
こちらも問題なく動作しました。
とりあえず、Visual Studio と GCC で使えれば個人的に満足なので、他の環境は考えないことにする。
C言語テストフレームワークとしての iutest
branche で作業してますので、良かったら見てください。今のところ、以下のような感じでテストが書けるようになりました。
#include "iutest_c.h" IUTEST_C_WORKSPACE(); // ワークの構築用に必要... int main(int argc, char* argv[]) { iuInitIrisUnitTest(&argc, argv); return IUTEST_RUN_ALL_TESTS(); } IUTEST(AssertionTest, Simple) { IUTEST_ASSERT_EQ(0, 0); IUTEST_ASSERT_NE(0, 1); IUTEST_ASSERT_LE(1, 1); IUTEST_ASSERT_LT(0, 1); IUTEST_ASSERT_GE(1, 1); IUTEST_ASSERT_GT(1, 0); }
0 件のコメント:
コメントを投稿