「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><参考></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.、ビルド&インストール</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>> CUnit - A Unit testing framework for C - Version 2.1-2</div>
<div>> http://cunit.sourceforge.net/</div>
<div>></div>
<div>></div>
<div>>***************** CUNIT CONSOLE - MAIN MENU
******************************</div>
<div>>(R)un (S)elect (L)ist (A)ctivate (F)ailures (O)ptions (H)elp
(Q)uit</div>
<div>>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>>Running Suite : hoge</div>
<div>> Running Test : test_hoge_001</div>
<div>> Running Test : test_hoge_002</div>
<div>> Running Test : test_hoge_003</div>
<div>></div>
<div>>Run Summary: Type Total Ran Passed Failed Inactive</div>
<div>> suites 1 1 n/a 0 0</div>
<div>> tests 3 3 3 0 0</div>
<div>> asserts 3 3 3 0 n/a</div>
<div>></div>
<div>>Elapsed time = 0.000 seconds</div>
<div> </div>
<div> </div>
<div>以上!!!CUnitの導入編でした!!!!!</div>
<div> </div>
<div><参考></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><参考></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.、ビルド&インストール</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>> CUnit - A Unit testing framework for C - Version 2.1-2</div>
<div>> http://cunit.sourceforge.net/</div>
<div>></div>
<div>></div>
<div>>***************** CUNIT CONSOLE - MAIN MENU
******************************</div>
<div>>(R)un (S)elect (L)ist (A)ctivate (F)ailures (O)ptions (H)elp
(Q)uit</div>
<div>>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>>Running Suite : hoge</div>
<div>> Running Test : test_hoge_001</div>
<div>> Running Test : test_hoge_002</div>
<div>> Running Test : test_hoge_003</div>
<div>></div>
<div>>Run Summary: Type Total Ran Passed Failed Inactive</div>
<div>> suites 1 1 n/a 0 0</div>
<div>> tests 3 3 3 0 0</div>
<div>> asserts 3 3 3 0 n/a</div>
<div>></div>
<div>>Elapsed time = 0.000 seconds</div>
<div> </div>
<div> </div>
<div>以上!!!CUnitの導入編でした!!!!!</div>
<div> </div>
<div><参考></div>
<div><a href="http://homepage3.nifty.com/kaku-chan/cunit/index.html">CUnit
チュートリアル</a></div>
<div> </div>
<div> </div>
<p> </p>