よる自動テストはモジュールの品質を高め、安全/確実なソフトウェアの構築に大きな効果をもたらします。CppUnitがうまく適用できないシチュエーションにも少なからず直面します。Navigator)の実装を考えてみましょう。ユーザはナビゲータに適当な複数のキーワードを与えます。ナビゲータはあらかじめ用意されたDatabaseにそのキーワードを食わせると、その検索結果としてURLが得られるものとします。Webブラウザを制御するクラス:Browserも提供され、これにURLを与えるとブラウザに引き渡してくれるとしましょう。Navigatorはその機能の実現にDatabaseとBrowserを利用することになります。=0;};#endif上記のクラスを利用したNavigatorのインタフェースは以下のようになります。input);};#endifコンストラクタでDatabaseとBrowserを与えておきます。ユーザからの入力0個以上のキーワードを空白で繋いだものをnavigateの引数に与えることにしましょう。keywordsをDatabase::find()に与え、URLを得る。(ただしこのURLには先頭の"http://"が付いていない)URLが空文字列であったらfalseを返す。なければBrowser::show()を呼び出す。テスト・ファースト・デザインの流儀に則れば、ここでテスト対象であるNavigatorのテストを書き、テストを繰り返しながらテスト項目をすべてパスするように実装を進めます。ここでDatabaseおよびBrowserが未実装であったとき、テストできません。こんなとき、Database/Browserの動作を真似する'偽物(Mock)'を用意することで解決できます。C++:http://mockpp.sf.net/)は、この'偽物(Mock)'を作るためのライブラリです。Mockの作り方Mockppを使って、Databaseのニセモノ:MockDatabaseを作ってみましょう。mockpp::MockObjectから導出します。メンバ変数に用意します。コンストラクタでは[2]のそれぞれに名前を付けておきます。ExpectedList,ReturnObjectListのコンストラクタにはそれらを包含するMockObjectのポインタを(第二引数に)与えます。ExpectedListをMockに登録する。メソッドfindでは与えられた引数をひとつづつ取り出し、ExpectedList::addActualに与えます。このとき期待した値と異なれば、例外をthrowすることによってテストが失敗します。用意しておいた値を返します。