ViVa! Saborigineer. EclipseでCUnit

showrss plugin Error: RSSが見つかりません。

EclipseでCUnitを使う

    CUnitとは、単体テストフレームワーク のことで、テストプログラムを作成すると、単体テストを自動で行うことができます。
    (検索すれば情報がたくさん出てくるので、詳細については省略します)

    今回、Linux(Cent OS)上のEclipseでCUnitを使ってみたので、覚え書き&まとめ。



CUnitのインストール

    公式サイトからrpmをダウンロードしてきてインストールするだけ。

    rootになって↓をやればOK。
    # rpm -ivh CUnit-2.1-0.i586.rpm

Eclipseで使ってみる

    CUnit(のライブラリ)を使用するには、コンパイル時に以下のようなオプションの指定が必要です。
    # gcc -L/usr/local/lib -lcunit hogehoge.c

    Eclipseで使用する際には、プロジェクトをプロパティを↓のように設定すればOK。


実際に使ってみる

    試しに↓のプログラムで実行。
#include <stdio.h>
#include <Cunit/Cunit.h>
#include <CUnit/CUError.h>
#include <CUnit/TestDB.h>
#include <CUnit/TestRun.h>
#include <CUnit/Automated.h>
#include <CUnit/Basic.h>
#include <CUnit/Console.h>
#include <CUnit/CUCurses.h>
#include <CUnit/Win.h>

/** 
 * (引数-1)する関数
 */
int vset(int no) {
    return no-1;
}

/**
 * テスト1: vset(5) == 4 ?
 */
void test1(void) {
   CU_ASSERT( vset(5) == 4);
}

/**
 * テスト2: vset(3) == 4 ?
 */
void test2(void) {
   CU_ASSERT( vset(3) == 4);
}

/**
 * メイン関数
 */
main() {
    CU_pSuite suite;    /**< テスト・スイートの宣言 */
    
//    int a = vset(5);
    //printf("%d\n", a);

    CU_initialize_registry();                       /**< CUnit初期化 */
    suite = CU_add_suite("suite",NULL,NULL);        /**< テスト・スイートの追加 */
    CU_add_test(suite, "vset(5) == 4 ?", test1);    /**< テスト1の追加 */
    CU_add_test(suite, "vset(3) == 4 ?", test2);    /**< テスト2の追加 */
    CU_basic_run_tests();                           /**< テスト実行(自動実行) */
    //CU_console_run_tests();                       /**< テスト実行(コンソールで操作しながら) */
    //CU_automated_run_tests();                     /**< テスト実行(結果をXMLに出力) */
    CU_cleanup_registry();                          /**< お掃除 */
 }


    これをコンパイルして実行すると、↓のような結果が得られる。
Suite: suite
  Test: vset(5) == 4 ? ... passed
  Test: vset(3) == 4 ? ... FAILED
    1. ../src/CUnit_Sample.c:30  - vset(3) == 4

--Run Summary: Type      Total     Ran  Passed  Failed
               suites        1       1     n/a       0
               tests         2       2       1       1
               asserts       2       2       1       1


所感

    まぁ、シンプルなプログラムになら適用しやすいかな、という印象。
    大規模システムに適用するには工夫が必要と思われる。

    CUnitで提供されるアサート・マクロの種類を見ても、ホワイトボックステストには向かない感じ。
    But、ブラックボックステストやデグレード確認等は楽にできそう。

    ただ、テストファースト的な開発でCUnitを使うと、
     「テストしやすいように設計しなきゃ!」
           ↓
     「よーし、関数の独立性を高くしちゃうぞ!」
           ↓
     「ここはもう少しシンプルにしておこう!」
    とかなって、割といい設計になりそうな気もしないでもない。

    …全ては「使い方次第」ってことでしょうか (^^ゞ


-おしまい