メモの日々


2004年01月25日(日) [長年日記]

[c][soft][dev] CCUnit の使い方

CCUnitを使ってみたので忘れないようメモ。

テストのために自分で作成しなければいけないファイルは、テストプログラムのメインファイル(1つ)とテストコードを書いたファイル(必要な数だけ)の2種類。テストコードを書いたら、ccunit_makeSuite ツールを使って「スイート」のコードを自動生成する。で、テスト用のファイルと自動生成されたスイート、テストしたいファイルをコンパイルすればOK。

テストプログラムのメインファイルはこう。ccunit_suite の引数に何を指定すればいいのか分からない。

#include <ccunit/CCUnitTestRunner.h>
#include <ccunit/CCUnitTestSuite.h>

int main()
{
    CCUnitTestRunner *runner;
    CCUnitTestSuite *suite;

    runner = ccunit_newTestRunner(stdout);
    suite = ccunit_suite("ここには何を書けばいいのかな");

    return ccunit_runTestRunner(runner, suite);
}

テストコードはこんな感じ。ccunit_makeSuite のためにJavadoc形式のコメントを書いておく。setUp_xxx と tearDown_xxx は各テストの前後に実行される(JUnitと同じ)。実行結果のチェックにはここにあるマクロを使用する。

#include <ccunit/CCUnitAssert.h>

/** test case: ここにも何を書けばいいのか分からない */

#include "foo.h"

void setUp_foo()
{
}

void tearDown_foo()
{
}

/**
 * 足し算のテスト
 * ここに書いたことはテストに失敗すると表示される
 */
void test_add()
{
    int a;

    a = foo_add(5, 5);
    CCUNIT_ASSERT_EQ_INT(10, a);
}

/**
 * 引き算のテスト
 */
void test_sub()
{
    int a;

    a = foo_sub(6, 5);
    CCUNIT_ASSERT_EQ_INT(1, a);
}

/** end test case */

スイートの自動生成はこんな感じ。これで test_foo.c と test_bar.c を元にして my_suite.c が自動生成される。

$ ccunit_makeSuite -o my_suite.c test_foo.c test_bar.c

コンパイルして出来上がった実行ファイルの出力結果はこう。

.F..
Time: 0.000189 sec

FAILURES!!!
Test Results:
Run 3, Failures 1
There was 1 failure:
test_foo.c:23: 足し算のテスト:
        10 == a
        expect: 10
        actual: 11

やはりユニットテストツールが使えるととても便利だ。

[life] 図書館へ行く

  • 煙か土か食い物 (舞城王太郎)
  • 立花隆秘書日記 (佐々木千賀子)
  • サッカーマガジン 2003.12.2 「磐田が来た!」

を借りた。帰りに本屋でJavaWorld 3月号を購入。

[life] お見舞い

部屋の契約更新があるので、保証人の印を押してもらおうと実家へ行った。そうしたら、骨折で入院中の祖母のお見舞いに行くことになった。

祖母にはもう何年も会っていなかった。今は目がよく見えないということだったが、おれを見たらすぐにおれだと分かってくれた。会話もちゃんとでき、思っていたよりしっかりしていた。早く退院できますように。

生活

  • 朝起きたら背中が痛かった。なんなんだ。今は夜だがまだ痛い。

やること

  • 靴紐を買う
  • 家賃
  • 保険料
  • 決算
  • 不動産屋
本日のツッコミ(全1件) [ツッコミを入れる]
山川 (2006年05月30日(火) 14:56)

CCUnitの使用方法に付いて、もう少し詳細に教えていただけないでしょうか。<br>ソースファイルのディレクトリ構造(ツールのディレクトリとの関係)、<br>非テスト関数とテストケース、テストスイート関数との関係、<br>ソースコードのコンパイル方法(makefileの中身)<br>等を教えていただけないでしょうか