CppUnitの使い方

バグがないプログラムのつくり方 JavaとEclipseで学ぶTDDテスト駆動開発 (Be agile!)

バグがないプログラムのつくり方 JavaとEclipseで学ぶTDDテスト駆動開発 (Be agile!)


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/
手順は以下の通り、

  1. Visual Studio 2003を起動。
  2. C:/cppunit-1.12.0/src/CppUnitLibraries.dswを開く。
  3. バッチビルドを選択。
  4. ビルドしたいものを選ぶ。(cppunit - Win32 Debugのみでよい)
  5. ビルドボタンを押す。


環境変数 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