昨年の10月から開発しているCutterというC言語用の単体テストフレームワークのバージョン1.0が昨日リリースされました。
フリーソフトウェアの世界には簡単にテストを書けるC言語用の単体フレームワークがそれまではありませんでした。例えば、GLibに含まれているGTesterでは以下のようにmain関数を定義してその中で実行したいテストを一つずつ登録しなくてはいけません。
GLibのtests/testingbase64.cから抜粋:
static void
test_base64_encode_decode (void)
{
...
}
int
main (int argc, char *argv[])
{
g_test_init (&argc, &argv, NULL);
g_test_add_func ("/misc/base64/decode", test_base64_decode);
return g_test_run ();
}
Cutterではこのような冗長な記述をさけるため以下のようなルールでテストが書かれていることを仮定しています。
- テストはダイナミックリンクライブラリとして生成する
- 実行するテストの関数名はtest_プレフィックスで書く
このようなルールを定めることによって、main関数を書く必要がなく、テストを登録する関数も呼ぶ必要がないために、より楽にテストを書けるようになっています。
Cutterでは上記のテストは以下のように書くだけですみます。
void test_base64_encode_decode (void); /* prototype */
void
test_base64_encode_decode (void)
{
...
}
テスト関数はダイナミックリンクライブラリとして読み込まれて実行される必要があるのでstaticな関数ではなくなってプロトタイプ宣言を書く必要がありますが、それでもGTesterに比べて簡潔に書けるようになっています。
Cutterではその他にもアサート文が充実してることなど他の単体テストフレームワークよりもかなり使いやすくなっています。Cでテストを書かなくてはいけなくなった時にはぜひ使ってみてください。