Linux上におけるCUnitの使い方 at ミネルヴァの梟は黄昏とともに飛び始める

ミネルヴァの梟は黄昏とともに飛び始める

Follow me on Twitter: http://www.twitter.com/dddaisuke

Linux上におけるCUnitの使い方

without comments

最近、社内の古いプログラムをメンテしているのだが、そのプログラムはC言語で実装されている。中身は複雑なLinuxソケットプログラムである。

ドキュメントもなければ、Unitテストプログラムも無い。

さすがに、Unitテストが無いのはマズイので、まずはUnitテストプログラムを書くことに。しかし、C言語でUnitテストなんてできるのか?一応、調査してみるCUnitなるライブラリは存在しているようだ。

導入方法は以下の通りです。
1.CUnitのRPMをダウンロードする
2.ターミナルから「rpm -ivh CUnit-2.1-0.i586.rpm」と入力し、ライブラリをインストールする
3.開発環境のライブラリディレクトリに「/usr/local/lib」を追加する
4.開発環境のインクルードディレクトリに「/usr/local/include」を追加する

これで、CUnitを利用できるようになります。

使い方の詳細は以下を参照

以下のコードは「http://www26.atwiki.jp/saborigineer/pages/24.html」から引用

[C]#include
#include
#include

#include

#include

#include

#include

#include

#include

#include

/**
* (引数-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(); /**< お掃除 */
}[/C]

以下のアサート文の一覧は「http://www.s34.co.jp/cpptechdoc/misc/cunit_guide/index.html」から引用
・ASSERT( condition );
conditionが偽(0)であったとき、失敗します。
・ASSERT_TRUE( condition );
conditionが偽であったとき、失敗します。
・ASSERT_FALSE( condition );
conditionが真(!=0)であったとき、失敗します。
・ASSERT_EQUAL( expected, actual );
得られた結果actualが期待する値expectedでなかったとき、すなわちexpected != actualのときに失敗します。
・ASSERT_NOT_EQUAL( expected, actual );
得られた結果actualが期待する値expectedであったとき、すなわちexpected == actualのときに失敗します。
・ASSERT_PTR_EQUAL( expected, actual );
得られた結果actualが期待するポインタ値expectedでなかったとき、すなわちexpected != actualのときに失敗します。
・ASSERT_PTR_NOT_EQUAL( expected, actual );
得られた結果actualが期待するポインタ値expectedであったとき、すなわちexpected == actualのときに失敗します。
・ASSERT_PTR_NULL( actual );
得られた結果actualがNULLポインタでなかったとき、失敗します。
・ASSERT_PTR_NOT_NULL( actual );
得られた結果actualがNULLポインタであったとき、失敗します。
・ASSERT_STRING_EQUAL( expected, actual );
得られた結果actualが期待する文字列expectedでなかったとき、
すなわちstrcmp(expected,actual) != 0 のときに失敗します。
・ASSERT_STRING_NOT_EQUAL( expected, actual );
得られた結果actualが期待する文字列expectedと一致したとき、
すなわちstrcmp(expected,actual) == 0 のときに失敗します。
・ASSERT_NSTRING_EQUAL( expected, actual, count );
得られた結果actualと期待する文字列expectedのcountが一致しなかったとき、
すなわちstrncmp(expected,actual, count) != 0 のときに失敗します。
・ASSERT_NSTRING_NOT_EQUAL( expected, actual, count );
得られた結果actualと期待する文字列expectedのcountが一致したとき、
すなわちstrncmp(expected,actual, count) == 0 のときに失敗します。
・ASSERT_DOUBLE_EQUAL( expected, actual, delta );
得られた結果actualと期待する値expectedとの差がdeltaより大きいとき、失敗します。
・ASSERT_DOUBLE_NOT_EQUAL( expected, actual, delta );
得られた結果actualと期待する値expectedとの差がdeltaより小さいとき、失敗します。

Written by daisuke

10月 14th, 2009 at 11:40 am

Posted in C言語

Leave a Reply