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 件のコメント:
コメントを投稿