Linux上におけるCUnitの使い方

最近、社内の古いプログラムをメンテしているのだが、そのプログラムは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より小さいとき、失敗します。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください