クィックスタート
CUnitでのテストの作成から実行,レポートの閲覧まで,ざっと試してみた
まずテスト対象を示す.
このプログラムは,固定メッセージを表示するだけの関数と,固定int値を返すだけの関数である.
CUnitのテストプログラムでは,それを実行するためのmain関数が必要なので,テスト対象のプログラムのmain関数はifdefでテスト時にはコンパイルされないようにしてある.
では,先のプログラムhello.cのテストプログラムを記述してみる.
まず,CUnit用のヘッダファイルを読み込む.
#include "CUnit/Basic.h" #include "CUnit/Console.h" #include "CUnit/Automated.h"今回は,basicとconsoleとautomatedの3つを網羅的に実行するので,3つともインクルードしている. 次に,テストケースとなる関数を記述する.
void
test_getMessage(void)
{
CU_ASSERT_STRING_EQUAL(MESSAGE, getMessage());
}
テストとして実行するプログラムは,引数と返り値はvoidでなければならない.
関数名は後で自分でハードコードで指定することになるので,何でもよいのだが,慣習として
test_ではじめるようだ. 中のCU_ASSERTで始まるのは,CUnit.hで定義されているマクロで,このパターンのマクロでいろいろなテストを実行する. サンプルでは,文字列とint値の二つのアサートを使用した.
CU_ASSERT_STRING_EQUAL CU_ASSERT_EQUAL第一引数と第二引数の値が一致しなければ,そのテストは失敗となる.
テスト関数を記述したら,テストプログラムのmain関数でそれらを呼び出す.
CUnitのフレームワークに則って記述することで,テストの実行と成功,失敗のカウントやそのレポートのための機能が使用できる.
そのCUnitのフレームワークでは,テスト関数とそれを複数集めたテストスィートという形でテストを管理する.
サンプルでは二つのテストスィートを作成し,それぞれに二つのテスト関数を登録している.
テストスィートはテスト関数の集まりで,それに含まれるテストを実行する前後の処理を指定できる(詳細は別ページにて).
このCUnitのフレームワークに則ると,main関数は以下の流れで記述することになる.
- テストレジストリの初期化
- テストスィートの作成
- テストスィートにテスト関数を登録
- テスト実行関数の実行
- テストレジストリのクリーンアップ
/* CUnitテストレジストリの初期化 */
if (CUE_SUCCESS != CU_initialize_registry())
return CU_get_error();
次にテストスィートを作成する.
pSuite = CU_add_suite("Suite_getMessage", NULL, NULL);
if (NULL == pSuite) {
CU_cleanup_registry();
return CU_get_error();
}
CU_add_suiteでテストスィートを作成し,テストレジストリに追加する.
- 第一引数
- テストスィート名(レポート時に使用)
- 第二引数
- テストスィート実行前処理関数
- 第三引数
- テストスィート実行後処理関数
/* テストスィートにテストを追加 */
if ((NULL == CU_add_test(pSuite, "getMessage", test_getMessage))
|| (NULL == CU_add_test(pSuite, "getMessage2", test_getMessage2)))
{
CU_cleanup_registry();
return CU_get_error();
}
CU_add_testでテストスィートにテスト関数を追加する.
- 第一引数
- テストを追加するテストスィート
- 第二引数
- 追加するテスト関数のテスト名
- 第三引数
- 追加するテスト関数
CU_basic_set_mode(CU_BRM_VERBOSE);
CU_basic_run_tests();
printf("\n");
CU_basic_show_failures(CU_get_failure_list());
printf("\n\n");
次が自動インタフェースで実行するものである.
これもコマンドラインからテストを実行するが,基本インタフェースとの違いは,XMLファイル形式で結果を出力するところである.
/* 自動インタフェースで全テストを実行 */ CU_automated_run_tests(); CU_list_tests_to_file();最初の関数でテストを実行し,二つ目の関数でその結果を二つのファイル CUnitAutomated-Listing.xml と CUnitAutomated-Results.xml を出力している. 次にコンソールインタフェースで実行している.
/* コンソールインタフェースを実行 */ CU_console_run_tests();コンソールインタフェースでは,ユーザがインタラクティブにテストを実行できる. 実行結果 main関数の最後では,テストレジストリを初期化して終る.
/* CUnitテストレジストリをクリーンアップして返る */ CU_cleanup_registry(); return CU_get_error();これも決め打ちでよい.
CUnitのテストをビルドするには,以下のオプションを指定する.
-I${CUNIT_HOME}/include -lcunit -L${CUNIT_HOME}/lib
CUNIT_HOMEは,CUnitをインストールしたディレクトリである.
以下実行例.
cc -I/home/matsu/usr/local/cunit/include -c -o hellotest.o hellotest.c cc -c -o hello.o hello.c cc -lcunit -L/home/matsu/usr/local/cunit/lib *.o -o hellotest

