CUnitを使おう!(導入編)

「CUnitを使おう!(導入編)」の編集履歴(バックアップ)一覧はこちら

CUnitを使おう!(導入編)」(2013/02/11 (月) 16:35:16) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

<p><span style="font-size:larger;"><span style="font-weight:800;">CUnitって・・・</span></span></p> <div> </div> <div>CUnitとは...</div> <div>単体テストを支援する 「テスティング・フレームワーク」である</div> <div>「xUnit」のC言語バージョンです。</div> <div> </div> <div>詳細設計が終了すれば単体テストを行いますが</div> <div>それらの単体テストの集合体(テストスイート)をCUnitにて作成・実行することが可能となります。</div> <div> </div> <div>CUnitの基本的な考え方として</div> <div> </div> <div>テストレジストリ</div> <div>Lスイート1(項目?)</div> <div>Lテストケース1(パターン?)</div> <div> </div> <div>Lスイート2</div> <div>Lテストケース1</div> <div>Lテストケース2</div> <div> </div> <div>というふうに</div> <div>段階的にテストを設計することが可能です。</div> <div> </div> <div> </div> <div>&lt;参考&gt;</div> <div><a href="http://ja.wikipedia.org/wiki/XUnit">xUnit Wiki</a></div> <div><a href="http://www.shoeisha.com/mag/windev/pdf/870607/windev0607_113_Object.pdf">世界はオブジェクトの海に浮かぶ(CUnit)</a></div> <div> </div> <div> </div> <p><span style="font-size:larger;"><strong>とりあえず環境構築</strong></span></p> <div>ひとまず、参考URLのとおりに</div> <div>Cygwin上でCUnitを動作させることを目指します。。</div> <div> </div> <div> </div> <div>1. cygwin を以下からDL</div> <div><a href="http://www.cygwin.com/">http://www.cygwin.com/</a></div> <div> </div> <div> </div> <div>2. cygwin インストール</div> <div>→gcc make を追加... 他はデフォルトまま</div> <div> </div> <div> </div> <div>3. CUnit を以下からDL</div> <div><a href="http://sourceforge.net/projects/cunit/">http://sourceforge.net/projects/cunit/</a></div> <div> </div> <div>→CUnit-2.1-2-src.tar.bz2.tar.bz2.tar.bz2</div> <div> </div> <div> </div> <div>4. cygwin 起動</div> <div> </div> <div>5.解凍</div> <div>$ tar -xvf CUnit-2.1-2-src.tar.bz2.tar.bz2.tar.bz2</div> <div>→CUnit-2.1-2/が作成される</div> <div> </div> <div> </div> <div>6.、ビルド&amp;インストール</div> <div> </div> <div>$./configure --enable-curses</div> <div>...(--enable-curses オプション:カーソルキーを用いたテキストベースのインタラクティブな ユーザーインターフェースを提供してくれます。)</div> <div>$make</div> <div>...</div> <div>$make install</div> <div>...</div> <div> </div> <div> </div> <div>これだけで導入完了!!!</div> <div> </div> <p><span style="font-size:larger;"><span style="font-weight:800;">どやって使うの?</span></span></p> <div>環境は整ったようなので</div> <div>実際に使い方の勉強も兼ねて動かしてみたいと思います。 </div> <div> </div> <div> </div> <div>1. 適当な*.cファイル作成(main.c)</div> <div> </div> <div> </div> <div>2. 評価対象の関数ソースを書きます。</div> <div>(この関数をテストの対象と想定します。)</div> <div><em> </em></div> <div style="margin-left:40px;"><em>// 評価対象関数</em></div> <div style="margin-left:40px;"><em>int hoge( int a )</em></div> <div style="margin-left:40px;"><em>{</em></div> <div style="margin-left:80px;"><em>return a;</em></div> <div style="margin-left:40px;"><em>}</em></div> <div> </div> <div>3. main()と評価関数(テストケース)を作成</div> <div> </div> <div style="margin-left:40px;"><em>// main</em></div> <div style="margin-left:40px;"><em>int main( void )</em></div> <div style="margin-left:40px;"><em>{</em></div> <div style="margin-left:80px;"><em>// test suite</em></div> <div style="margin-left:80px;"><em>CU_pSuite cu_suite;</em></div> <div style="margin-left:80px;"><em> </em></div> <div style="margin-left:80px;"><em>printf("Hello CUnit Would!!\n");</em></div> <div style="margin-left:80px;"><em> </em></div> <div style="margin-left:80px;"><em>// ------------------</em></div> <div style="margin-left:80px;"><em>// CUnit 初期化</em></div> <div style="margin-left:80px;"><em>// ------------------</em></div> <div style="margin-left:80px;"><em> </em></div> <div style="margin-left:80px;"><em>// テストレジストリ 初期化</em></div> <div style="margin-left:80px;"><em>CU_initialize_registry();</em></div> <div style="margin-left:80px;"><em> </em></div> <div style="margin-left:80px;"><em>// テストスイート登録</em></div> <div style="margin-left:80px;"><em>cu_suite = CU_add_suite("hoge", NULL, NULL);</em></div> <div style="margin-left:80px;"><em> </em></div> <div style="margin-left:80px;"><em> </em></div> <div style="margin-left:80px;"><em>// ------------------</em></div> <div style="margin-left:80px;"><em>// CUnit テスト登録</em></div> <div style="margin-left:80px;"><em>// ------------------</em></div> <div style="margin-left:80px;"><em>// テスト関数1</em></div> <div style="margin-left:80px;"><em>CU_add_test( cu_suite, "test_hoge_001", test_hoge_001 );</em></div> <div style="margin-left:80px;"><em>// テスト関数2</em></div> <div style="margin-left:80px;"><em>CU_add_test( cu_suite, "test_hoge_002", test_hoge_001 );</em></div> <div style="margin-left:80px;"><em>// テスト関数3</em></div> <div style="margin-left:80px;"><em>CU_add_test( cu_suite, "test_hoge_003", test_hoge_001 );</em></div> <div style="margin-left:80px;"><em> </em></div> <div style="margin-left:80px;"><em> </em></div> <div style="margin-left:80px;"><em>// ------------------</em></div> <div style="margin-left:80px;"><em>// CUnit 実行</em></div> <div style="margin-left:80px;"><em>// ------------------</em></div> <div style="margin-left:80px;"><em>CU_console_run_tests();</em></div> <div style="margin-left:80px;"><em>CU_cleanup_registry();</em></div> <div style="margin-left:80px;"><em> </em></div> <div style="margin-left:80px;"><em>// 正常</em></div> <div style="margin-left:80px;"><em>return 0;</em></div> <div style="margin-left:40px;"><em>}</em></div> <div style="margin-left:40px;"><em> </em></div> <div style="margin-left:40px;"><em>// test 1</em></div> <div style="margin-left:40px;"><em>void test_hoge_001( void )</em></div> <div style="margin-left:40px;"><em>{</em></div> <div style="margin-left:80px;"><em>CU_ASSERT( 1 == hoge( 1 ) );</em></div> <div style="margin-left:40px;"><em>}</em></div> <div style="margin-left:40px;"><em> </em></div> <div style="margin-left:40px;"><em>// test 2</em></div> <div style="margin-left:40px;"><em>void test_hoge_002( void )</em></div> <div style="margin-left:40px;"><em>{</em></div> <div style="margin-left:80px;"><em>CU_ASSERT( 2 == hoge( 2 ) );</em></div> <div style="margin-left:40px;"><em>}</em></div> <div style="margin-left:40px;"><em> </em></div> <div style="margin-left:40px;"><em>// test 3</em></div> <div style="margin-left:40px;"><em>void test_hoge_003( void )</em></div> <div style="margin-left:40px;"><em>{</em></div> <div style="margin-left:80px;"><em>CU_ASSERT( 3 == hoge( 3 ) );</em></div> <div style="margin-left:40px;"><em>}</em></div> <div>...みたいな感じで書く(添付ファイルにソースおいておきます)</div> <div> </div> <div>[備考]</div> <div>CU_ASSERT( RESULT );</div> <div>RESULT=TRUE(成功),FALSE(失敗)</div> <div> </div> <div> </div> <div>4. make(cunittest.exeの作成)</div> <div>$gcc main.c -o cunittest.exe -Wall -L/usr/local/lib -lcunit</div> <div> </div> <div>[備考]</div> <div>-L:ライブラリ格納先</div> <div>-l:使用ライブラリ</div> <div> </div> <div> </div> <div>5. とりあえず実行してみる</div> <div> </div> <div>$./cunittest.exe</div> <div> </div> <div>&gt;     CUnit - A Unit testing framework for C - Version 2.1-2</div> <div>&gt;             http://cunit.sourceforge.net/</div> <div>&gt;</div> <div>&gt;</div> <div>&gt;***************** CUNIT CONSOLE - MAIN MENU ******************************</div> <div>&gt;(R)un  (S)elect  (L)ist  (A)ctivate  (F)ailures  (O)ptions  (H)elp  (Q)uit</div> <div>&gt;Enter command:</div> <div> </div> <div>と表示され、コマンドを要求される。</div> <div> </div> <div>6. テストの実行</div> <div> </div> <div>5が表示されている状態で</div> <div>"r"+Enter(run all)</div> <div>で登録されているスイートが実行される。</div> <div> </div> <div>&gt;Running Suite : hoge</div> <div>&gt;     Running Test : test_hoge_001</div> <div>&gt;     Running Test : test_hoge_002</div> <div>&gt;     Running Test : test_hoge_003</div> <div>&gt;</div> <div>&gt;Run Summary:    Type  Total    Ran Passed Failed Inactive</div> <div>&gt;              suites      1      1    n/a      0        0</div> <div>&gt;               tests      3      3      3      0        0</div> <div>&gt;             asserts      3      3      3      0      n/a</div> <div>&gt;</div> <div>&gt;Elapsed time =    0.000 seconds</div> <div> </div> <div> </div> <div>以上!!!CUnitの導入編でした!!!!!</div> <div> </div> <div>&lt;参考&gt;</div> <div><a href="http://homepage3.nifty.com/kaku-chan/cunit/index.html">CUnit チュートリアル</a></div> <div> </div> <div> </div> <p> </p>
<p><span style="font-size:larger;"><span style="font-weight:800;">CUnitって・・・</span></span></p> <div> </div> <div>CUnitとは...</div> <div>単体テストを支援する 「テスティング・フレームワーク」である</div> <div>「xUnit」のC言語バージョンです。</div> <div> </div> <div>詳細設計が終了すれば単体テストを行いますが</div> <div>それらの単体テストの集合体(テストスイート)をCUnitにて作成・実行することが可能となります。</div> <div> </div> <div>CUnitの基本的な考え方として</div> <div> </div> <div>テストレジストリ</div> <div> Lスイート1(項目?)</div> <div>  Lテストケース1(パターン?)</div> <div> </div> <div> Lスイート2</div> <div>  Lテストケース1</div> <div>  Lテストケース2</div> <div> </div> <div>というふうに</div> <div>段階的にテストを設計することが可能です。</div> <div> </div> <div> </div> <div>&lt;参考&gt;</div> <div><a href="http://ja.wikipedia.org/wiki/XUnit">xUnit Wiki</a></div> <div><a href="http://www.shoeisha.com/mag/windev/pdf/870607/windev0607_113_Object.pdf">世界はオブジェクトの海に浮かぶ(CUnit)</a></div> <div> </div> <div> </div> <p><span style="font-size:larger;"><strong>とりあえず環境構築</strong></span></p> <div>ひとまず、参考URLのとおりに</div> <div>Cygwin上でCUnitを動作させることを目指します。。</div> <div> </div> <div> </div> <div>1. cygwin を以下からDL</div> <div><a href="http://www.cygwin.com/">http://www.cygwin.com/</a></div> <div> </div> <div> </div> <div>2. cygwin インストール</div> <div>→gcc make を追加... 他はデフォルトまま</div> <div> </div> <div> </div> <div>3. CUnit を以下からDL</div> <div><a href="http://sourceforge.net/projects/cunit/">http://sourceforge.net/projects/cunit/</a></div> <div> </div> <div>→CUnit-2.1-2-src.tar.bz2.tar.bz2.tar.bz2</div> <div> </div> <div> </div> <div>4. cygwin 起動</div> <div> </div> <div>5.解凍</div> <div>$ tar -xvf CUnit-2.1-2-src.tar.bz2.tar.bz2.tar.bz2</div> <div>→CUnit-2.1-2/が作成される</div> <div> </div> <div> </div> <div>6.、ビルド&amp;インストール</div> <div> </div> <div>$./configure --enable-curses</div> <div>...(--enable-curses オプション:カーソルキーを用いたテキストベースのインタラクティブな ユーザーインターフェースを提供してくれます。)</div> <div>$make</div> <div>...</div> <div>$make install</div> <div>...</div> <div> </div> <div> </div> <div>これだけで導入完了!!!</div> <div> </div> <p><span style="font-size:larger;"><span style="font-weight:800;">どやって使うの?</span></span></p> <div>環境は整ったようなので</div> <div>実際に使い方の勉強も兼ねて動かしてみたいと思います。 </div> <div> </div> <div> </div> <div>1. 適当な*.cファイル作成(main.c)</div> <div> </div> <div> </div> <div>2. 評価対象の関数ソースを書きます。</div> <div>(この関数をテストの対象と想定します。)</div> <div><em> </em></div> <div style="margin-left:40px;"><em>// 評価対象関数</em></div> <div style="margin-left:40px;"><em>int hoge( int a )</em></div> <div style="margin-left:40px;"><em>{</em></div> <div style="margin-left:80px;"><em>return a;</em></div> <div style="margin-left:40px;"><em>}</em></div> <div> </div> <div>3. main()と評価関数(テストケース)を作成</div> <div> </div> <div style="margin-left:40px;"><em>// main</em></div> <div style="margin-left:40px;"><em>int main( void )</em></div> <div style="margin-left:40px;"><em>{</em></div> <div style="margin-left:80px;"><em>// test suite</em></div> <div style="margin-left:80px;"><em>CU_pSuite cu_suite;</em></div> <div style="margin-left:80px;"><em> </em></div> <div style="margin-left:80px;"><em>printf("Hello CUnit Would!!\n");</em></div> <div style="margin-left:80px;"><em> </em></div> <div style="margin-left:80px;"><em>// ------------------</em></div> <div style="margin-left:80px;"><em>// CUnit 初期化</em></div> <div style="margin-left:80px;"><em>// ------------------</em></div> <div style="margin-left:80px;"><em> </em></div> <div style="margin-left:80px;"><em>// テストレジストリ 初期化</em></div> <div style="margin-left:80px;"><em>CU_initialize_registry();</em></div> <div style="margin-left:80px;"><em> </em></div> <div style="margin-left:80px;"><em>// テストスイート登録</em></div> <div style="margin-left:80px;"><em>cu_suite = CU_add_suite("hoge", NULL, NULL);</em></div> <div style="margin-left:80px;"><em> </em></div> <div style="margin-left:80px;"><em> </em></div> <div style="margin-left:80px;"><em>// ------------------</em></div> <div style="margin-left:80px;"><em>// CUnit テスト登録</em></div> <div style="margin-left:80px;"><em>// ------------------</em></div> <div style="margin-left:80px;"><em>// テスト関数1</em></div> <div style="margin-left:80px;"><em>CU_add_test( cu_suite, "test_hoge_001", test_hoge_001 );</em></div> <div style="margin-left:80px;"><em>// テスト関数2</em></div> <div style="margin-left:80px;"><em>CU_add_test( cu_suite, "test_hoge_002", test_hoge_001 );</em></div> <div style="margin-left:80px;"><em>// テスト関数3</em></div> <div style="margin-left:80px;"><em>CU_add_test( cu_suite, "test_hoge_003", test_hoge_001 );</em></div> <div style="margin-left:80px;"><em> </em></div> <div style="margin-left:80px;"><em> </em></div> <div style="margin-left:80px;"><em>// ------------------</em></div> <div style="margin-left:80px;"><em>// CUnit 実行</em></div> <div style="margin-left:80px;"><em>// ------------------</em></div> <div style="margin-left:80px;"><em>CU_console_run_tests();</em></div> <div style="margin-left:80px;"><em>CU_cleanup_registry();</em></div> <div style="margin-left:80px;"><em> </em></div> <div style="margin-left:80px;"><em>// 正常</em></div> <div style="margin-left:80px;"><em>return 0;</em></div> <div style="margin-left:40px;"><em>}</em></div> <div style="margin-left:40px;"><em> </em></div> <div style="margin-left:40px;"><em>// test 1</em></div> <div style="margin-left:40px;"><em>void test_hoge_001( void )</em></div> <div style="margin-left:40px;"><em>{</em></div> <div style="margin-left:80px;"><em>CU_ASSERT( 1 == hoge( 1 ) );</em></div> <div style="margin-left:40px;"><em>}</em></div> <div style="margin-left:40px;"><em> </em></div> <div style="margin-left:40px;"><em>// test 2</em></div> <div style="margin-left:40px;"><em>void test_hoge_002( void )</em></div> <div style="margin-left:40px;"><em>{</em></div> <div style="margin-left:80px;"><em>CU_ASSERT( 2 == hoge( 2 ) );</em></div> <div style="margin-left:40px;"><em>}</em></div> <div style="margin-left:40px;"><em> </em></div> <div style="margin-left:40px;"><em>// test 3</em></div> <div style="margin-left:40px;"><em>void test_hoge_003( void )</em></div> <div style="margin-left:40px;"><em>{</em></div> <div style="margin-left:80px;"><em>CU_ASSERT( 3 == hoge( 3 ) );</em></div> <div style="margin-left:40px;"><em>}</em></div> <div>...みたいな感じで書く(添付ファイルにソースおいておきます)</div> <div> </div> <div>[備考]</div> <div>CU_ASSERT( RESULT );</div> <div>RESULT=TRUE(成功),FALSE(失敗)</div> <div> </div> <div> </div> <div>4. make(cunittest.exeの作成)</div> <div>$gcc main.c -o cunittest.exe -Wall -L/usr/local/lib -lcunit</div> <div> </div> <div>[備考]</div> <div>-L:ライブラリ格納先</div> <div>-l:使用ライブラリ</div> <div> </div> <div> </div> <div>5. とりあえず実行してみる</div> <div> </div> <div>$./cunittest.exe</div> <div> </div> <div>&gt;     CUnit - A Unit testing framework for C - Version 2.1-2</div> <div>&gt;             http://cunit.sourceforge.net/</div> <div>&gt;</div> <div>&gt;</div> <div>&gt;***************** CUNIT CONSOLE - MAIN MENU ******************************</div> <div>&gt;(R)un  (S)elect  (L)ist  (A)ctivate  (F)ailures  (O)ptions  (H)elp  (Q)uit</div> <div>&gt;Enter command:</div> <div> </div> <div>と表示され、コマンドを要求される。</div> <div> </div> <div>6. テストの実行</div> <div> </div> <div>5が表示されている状態で</div> <div>"r"+Enter(run all)</div> <div>で登録されているスイートが実行される。</div> <div> </div> <div>&gt;Running Suite : hoge</div> <div>&gt;     Running Test : test_hoge_001</div> <div>&gt;     Running Test : test_hoge_002</div> <div>&gt;     Running Test : test_hoge_003</div> <div>&gt;</div> <div>&gt;Run Summary:    Type  Total    Ran Passed Failed Inactive</div> <div>&gt;              suites      1      1    n/a      0        0</div> <div>&gt;               tests      3      3      3      0        0</div> <div>&gt;             asserts      3      3      3      0      n/a</div> <div>&gt;</div> <div>&gt;Elapsed time =    0.000 seconds</div> <div> </div> <div> </div> <div>以上!!!CUnitの導入編でした!!!!!</div> <div> </div> <div>&lt;参考&gt;</div> <div><a href="http://homepage3.nifty.com/kaku-chan/cunit/index.html">CUnit チュートリアル</a></div> <div> </div> <div> </div> <p> </p>

表示オプション

横に並べて表示:
変化行の前後のみ表示: