CppUnitの使い方
バグがないプログラムのつくり方 JavaとEclipseで学ぶTDDテスト駆動開発 (Be agile!)
- 作者: 川端光義,倉貫義人,兒玉督司
- 出版社/メーカー: 翔泳社
- 発売日: 2004/09/22
- メディア: 単行本
- 購入: 9人 クリック: 162回
- この商品を含むブログ (49件) を見る
CppUnitの使い方が、総合的に書いているペー
ジが案外少ない。しょうがないので、まとめ
てみた。
以下から、CppUnitのダウンロードする。
http://sourceforge.net/projects/cppunit/
2007/3/29現在のバージョンは 1.12.0 。
展開し、適当な場所に置く。
今回は、以下の場所に置いた。
C:/cppunit-1.12.0
CppUnitライブラリのビルドを行う。
http://www.s34.co.jp/cpptechdoc/misc/cppunit_guide/
手順は以下の通り、
- Visual Studio 2003を起動。
- C:/cppunit-1.12.0/src/CppUnitLibraries.dswを開く。
- バッチビルドを選択。
- ビルドしたいものを選ぶ。(cppunit - Win32 Debugのみでよい
?) - ビルドボタンを押す。
環境変数 path に以下のディレクトリを追加。
C:/cppunit-1.12.0/lib
これは、やらなくてもよいかも。
ダイナミックリンクするときは必要だが、以
下の説明どおりビルドするなら必要ない。
子河童のダウンロード
http://sourceforge.jp/projects/cuppa/
子河童のビルド
省略
環境変数 path に以下のディレクトリを追加。
C:/cuppa/bin
テストコードを作る。
http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/cuppa/cuppa/cpp/tutorial.html?rev=HEAD
Visual Studio 2003でWin32コンソールアプ
リケーションのプロジェクト作成。空のプロ
ジェクトがよい。
テストファーストなので、まずテストから作る。
cocuppa -m run cocuppa -s CounterTest testInit
出来上がったファイルをプロジェクトに追加。
プロパティーで以下の設定を行う。
- C/C++→全般→追加のインクルードディレクトリに"c:/cppunit-1.12.0/include"を追加。
- リンカ→入力→追加の依存ファイルに"c:\cppunit-1.12.0\lib\cppunitd.lib"を追加。
- C/C++→コード生成→ランタイム ライブラリを、マルチスレッド デバッグ DLLに変更。
ビルドして実行。
無事、"- no implementation"が表示されればOK。
いよいよ実装に移る。まずはテストから。
void testInit() { CPPUNIT_ASSERT_EQUAL(0, c_->count()); }
これだけでは当然動かないので、初期化やメ
ンバーの定義を行う。
// your stuff... Counter* c_; … virtual void setUp() { c_ = new Counter; } virtual void tearDown() { delete c_; }
そして、Counterのヘッダを読み込む必要がある。
これには、Coumaを使う。
couma -s CounterTest -i Counter.h
テストは出来たが、このままではコンパイル
できない (コンパイルできないことを確認す
るのもテストファーストでは重要)。
いよいよ、実装する。
Counter.h
#ifndef COUNTER_H #define COUNTER_H class Counter { private: int count_; // カウント値 public: Counter(); // 初期化 void incr(); // インクリメント int count() const; // カウント値を返す }; #endif
Counter.cpp
#include "Counter.h" Counter::Counter() { } void Counter::incr() { } int Counter::count() const { return -1; }
これを実行すると、以下の表示が出る。
- Expected: 0 - Actual : -1
予想通り失敗である。
次に成功させる。成功することだけを考える。
そのためには、以下ようにコードを修正する。
int Counter::count() const { return 0; }
そして、リファクタリング。より、正確で完成
度の高いものにしていくが、1歩ずつ進むこと。
以上
以下はCppUnit関連リンク
http://www.ogis-ri.co.jp/otc/hiroba/technical/CppUnit/
http://www.mikamama.com/CppUnitBook/draft/
http://engineering.seesaa.net/article/6535615.html
http://www.srcw.net/blog/2007/01/vendor_drop.html
http://www.kanshin.com/keyword/202001
http://engineering.seesaa.net/article/6535615.html