LoginSignup
46
42

More than 5 years have passed since last update.

CUnitでCプログラムの単体テストをする

Last updated at Posted at 2013-01-08

チュートリアルを鵜呑みにしたらハマったのでメモ。

インストール

チュートリアルに従い、以下のコマンドを打つことで/usr/local/以下にCUnit関連がインストールされます。

Bash
$ wget http://jaist.dl.sourceforge.net/project/cunit/CUnit/2.1-2/CUnit-2.1-2-src.tar.bz2
$ tar xvf CUnit-2.1-2-src.tar.bz2
$ cd CUnit-2.1-2
$ ./configure
$ make
$ sudo make install

事前準備

LD_LIBRARY_PATHを明示的に指定しないと共有オブジェクトファイルがないと怒られるのであらかじめ指定しておきます。大事です。
ここで1時間弱はまりました。

Bash
$ export LD_LIBRARY_PATH=/usr/local/lib

永続化するには.bashrcあたりに追記しておきます。

.bashrc
export LD_LIBRARY_PATH=/usr/local/lib

追記した結果を反映させるには下記いずれかのコマンドを打ってください。

Bash
$ source ~/.bashrc
$ . ~/.bashrc

動作確認

チュートリアルに従ってmain.cを作成します。

main.c
//=============================================================================
// ファイル : main.c
//=============================================================================
#include <CUnit/CUnit.h>
#include <CUnit/Console.h>

//-----------------------------------------------------------------------------
// プロトタイプ宣言
//-----------------------------------------------------------------------------
void sort(int array[], int num);
void test_sort_001(void);
void test_sort_002(void);
void test_sort_003(void);
void test_sort_004(void);
void test_sort_005(void);

//-----------------------------------------------------------------------------
// main() 関数
//-----------------------------------------------------------------------------
int main() {
  CU_pSuite sort_suite;

  CU_initialize_registry();
  sort_suite = CU_add_suite("Sort", NULL, NULL);
  CU_add_test(sort_suite, "test_001", test_sort_001);
  CU_add_test(sort_suite, "test_002", test_sort_002);
  CU_add_test(sort_suite, "test_003", test_sort_003);
  CU_add_test(sort_suite, "test_004", test_sort_004);
  CU_add_test(sort_suite, "test_005", test_sort_005);
  CU_console_run_tests();
  CU_cleanup_registry();

  return(0);
}

//-----------------------------------------------------------------------------
// テスト対象のソート関数
//-----------------------------------------------------------------------------
void sort(int array[], int num) {
  int i;
  int j;
  int val;

  for(i=0; i<(num-1); i++) {
    for(j=(num-1); j>i; j--) {
      if (array[j-1] > array[j]) {
        val = array[j];
        array[j] = array[j-1];
        array[j-1] = val;
      }
    }
  }
}

//-----------------------------------------------------------------------------
// テスト関数1
//-----------------------------------------------------------------------------
void test_sort_001(void) {
  int array[] = {3};

  sort(array, 1);
  CU_ASSERT(array[0] == 3);
}

//-----------------------------------------------------------------------------
// テスト関数2
//-----------------------------------------------------------------------------
void test_sort_002(void) {
  int array[] = {11, 7, 5, 3, 2};

  sort(array, 5);
  CU_ASSERT(array[0] == 2);
  CU_ASSERT(array[1] == 3);
  CU_ASSERT(array[2] == 5);
  CU_ASSERT(array[3] == 7);
  CU_ASSERT(array[4] == 11);
}

//-----------------------------------------------------------------------------
// テスト関数3
//-----------------------------------------------------------------------------
void test_sort_003(void) {
  int array[] = {7, 11, 3, 2, 5};

  sort(array, 5);
  CU_ASSERT(array[0] == 2);
  CU_ASSERT(array[1] == 3);
  CU_ASSERT(array[2] == 5);
  CU_ASSERT(array[3] == 7);
  CU_ASSERT(array[4] == 11);
}

//-----------------------------------------------------------------------------
// テスト関数4
//-----------------------------------------------------------------------------
void test_sort_004(void) {
  int array[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};

  sort(array, 10);
  CU_ASSERT(array[0] == 1);
  CU_ASSERT(array[1] == 2);
  CU_ASSERT(array[2] == 3);
  CU_ASSERT(array[3] == 4);
  CU_ASSERT(array[4] == 5);
  CU_ASSERT(array[5] == 6);
  CU_ASSERT(array[6] == 7);
  CU_ASSERT(array[7] == 8);
  CU_ASSERT(array[8] == 9);
  CU_ASSERT(array[9] == 10);
}

//-----------------------------------------------------------------------------
// テスト関数5
//-----------------------------------------------------------------------------
void test_sort_005(void) {
  int array[] = {2, 9, 3, 6, 10, 5, 8, 4, 1, 7};

  sort(array, 10);
  CU_ASSERT(array[0] == 1);
  CU_ASSERT(array[1] == 2);
  CU_ASSERT(array[2] == 3);
  CU_ASSERT(array[3] == 4);
  CU_ASSERT(array[4] == 5);
  CU_ASSERT(array[5] == 6);
  CU_ASSERT(array[6] == 7);
  CU_ASSERT(array[7] == 8);
  CU_ASSERT(array[8] == 9);
  CU_ASSERT(array[9] == 10);
}

//=============================================================================
// ファイルエンド
//=============================================================================

コンパイルして実行します。

Bash
$ gcc main.c -Wall -L/usr/local/lib -lcunit
$ ./a.out

チュートリアル通りに以下の画面が出れば成功です。
出ない場合はエラーメッセージをググってください。

Bash
     CUnit - A Unit testing framework for C - Version 2.1-0
     http://cunit.sourceforge.net/


*************** CUNIT CONSOLE - MAIN MENU ***********************
(R)un all, (S)elect suite, (L)ist suites, Show (F)ailures, (Q)uit
Enter Command :

参考

46
42
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
46
42