iutest_c を実行するために必要な main コードを以下に記述します。
/* ワーキング変数の定義 */
IUTEST_C_WORKSPACE();
int main(int argc, char** argv)
{
IUTEST_INIT(&argc, argv);
return IUTEST_RUN_ALL_TESTS();
}
IUTEST(CaseName, TestName)
{
int x = 0;
IUTEST_ASSERT_EQ(0, x);
}
IUTEST マクロからテストの記述を開始します。
あとは、アサーションマクロを使用してあなたのコードをテストするだけです。
iutest_c はテストを自動的に検出して実行する機能がありますが、
一部対応していないコンパイラがあります。
その場合、IUTEST_REIGSTER_TEST を使用して登録をしてください。
int main(int argc, char** argv)
{
/* 初期化前に call してください。 */
/* testcase_name にテストケース名 */
/* test_name にテスト名 */
IUTEST_REIGSTER_TEST(testcase_name, test_name);
IUTEST_INIT(&argc, argv);
return IUTEST_RUN_ALL_TESTS();
}
iutest_c の アサーションには使用するにあたって、一部制限があります。
- IUTEST_*_EQ
実行時の値の出力のために、actual に右辺値を使用できません。
また、expected には右辺値を使用できますが、実行時の値が出力されません。
どちらも実行時の値を出力したい場合、IUTEST_*_LVALUE_EQ を使用してください。
(※ただし、右辺値を使用できません。)
右辺値を使用したい場合は、IUTEST_*_RVALUE_EQ を使用してください。
(※左辺値も使用できます。ただし、実行時の値が出力されません。)
- IUTEST_*_STREQ
- IUTEST_*_STRNE
- IUTEST_*_STRCASEEQ
- IUTEST_*_STRCASENE
制限なく使用できます。
- IUTEST_*_FLOAT_EQ
- IUTEST_*_DOUBLE_EQ
expected に右辺値/左辺値、actual に左辺値が使用できます。
また、actual の実行時の値が出力されます。
- その他のアサーション
実装の都合上、IUTEST_*_EQ と同様の問題がありますが、
現バージョンでは、左辺値のみ利用できるアサーションとして提供しています。
そのため、右辺値を使用できません。
右辺値を利用したい場合は、一時変数に格納することで回避できます。
将来のバージョンアップで根本的解決を目指しておりますが、IUTEST_*_EQ と同様の提供方法になる可能性もあります。
iutest_c でもテストフィクスチャに対応しています。
言語が C なので、テストフィクスチャは構造体と関数ポインタで構成します。
よって、iutest や Google Test とは少し違った記述が必要になります。
void TestF_SetUp(void)
{
/* ここに SetUp コード */
}
static const iuTestFixture TestF = { NULL /* SetUpTestCase */
, NULL /* TearDownTestCase */
, TestF_SetUp /* SetUp */
, NULL /* TearDwon */
};
IUTEST_F(TestF, Hoge)
{
IUTEST_ASSERT_EQ(0, 0);
}
関数の引数にパラメータを渡すテストを簡易的に記述できるマクロを用意してあります。
void TestFunction(int x, int y)
{
IUTEST_ASSERT_EQ(x, y);
}
IUTEST_PMZ(ParamMethodTest, EQ, TestFunction, 0, 0);
IUTEST_PMZ(ParamMethodTest, EQ, TestFunction, 1, 1);
IUTEST_PMZ(ParamMethodTest, EQ, TestFunction, 2, 2);
--iutest_list_tests
上記オプションを指定すると、プログラムは検出したテストの一覧を出力します。
--iutest_filter=<filter>
上記オプション、または環境変数 IUTEST_FILTER を指定すると、<filter> にマッチしたテストが実行されます。
(テスト名は TestCaseName.TestName)
フィルターのフォーマットは、':' で区切られたワイルドカードパターンのリスト(ポジティブ)と
':' で区切られたパターンの先頭に '-' がついたリスト(ネガティブ)です。
iutest_c でも、DISABLED テストが使用できます。
テストケースもしくはテスト名の先頭に "DISABLED_" が ついたテストは無効テストとして通常の実行では無視されます。
--iutest_also_run_disabled_tests
上記オプション、または環境変数 IUTEST_ALSO_RUN_DISABLED_TESTS を指定すると、無効テストも実行されます。
--iutest_repeat=<count>
上記オプション、または環境変数 IUTEST_REPEAT を指定すると、テストの繰り返し回数を設定できます。
<count> に負数を指定した場合、無限に繰り返します。
--iutest_shuffle
上記オプション、または環境変数 IUTEST_SHUFFLE を指定すると、ランダムな順序でテストを実行します。
これによって、テスト間に良くない依存関係がないか調べることができます。
--iutest_output=xml[:filepath]
上記オプション、または環境変数 IUTEST_OUTPUT を指定すると、XML 形式でテスト結果を出力します。
出力フォーマットは、 JUnit report に基づいており、 Jenkins など CI ツールで解析することができます。