ファイヤープロジェクト
クィックスタート
2006-12-08T08:45+09:00   matsu
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関数は以下の流れで記述することになる.
  1. テストレジストリの初期化
  2. テストスィートの作成
  3. テストスィートにテスト関数を登録
  4. テスト実行関数の実行
  5. テストレジストリのクリーンアップ
テストレジストリの初期化は大体決め打ちでよい.
   /* 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.xmlCUnitAutomated-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
matsu(C)
Since 2002
Mail to matsu