2009-04-03 5 views
0

既存のC++プロジェクトの単体テストを設定しようとしています。C++で小規模な値のようなクラスを単体テストして模倣する

ここにセットアップがあります: 私はGoogle Testを含むGoogle Mockを選択しました。私は別のプロジェクト(テストと呼ばれる)をVisual Studio Solutionに追加しました。テストするユニットはMainと呼ばれる別のプロジェクトにあります。私がテストしたい各cppファイルをTestsプロジェクトに追加する予定です。 Testsプロジェクトは、Mainのすべてのヘッダーファイルにアクセスできます。

テストプロジェクトに1つのcppファイルを追加してコンパイルしましたが、リンカーエラーが発生します。ほとんどは、CTimeValueと呼ばれるCOleDateTimeから派生したクラスのためです。テスト対象のユニットには、値渡しのCTimeValueパラメータを持つメソッドがあり、いくつかのCTimeValue属性も宣言されています。

私は、UUTを孤立してテストし、すべての依存関係に対してモックと偽物を使用したいと考えています。私はCTimeValueでそれを行う方法がわかりません。これは値として使用され、仮想メソッドは含まれていませんが、依然として非常に複雑で、個別の単体テストが必要です。

CTimeValueは、このような多くのクラスのうちの1つです。どのようにこれらのユーザー定義型を使用するクラスのテストを分離することができますか?

乾杯、フェリックス

答えて

3

ときには単純に物事を模倣することができません。その場合は、問題のクラス(CTimeValue)の包括的なテストを行い、そのクラスのテストを別のテストのサブサイトとして実行することを確認してください。

+0

これは、答えに感謝しなければなりません。モックはバリュー・セマンティクスでうまく機能していないようです。 – TheFogger

0

モックオブジェクトを使用すると、UUTが使用するメソッドシグネチャを追加するだけで、Google Mockを使用してモックを作成できます。もちろん、CTimeValueクラスのための別のテストスイートが必要です。それがあれば、実際のオブジェクトをリンクするほうがよいでしょう。モックを作成するためのインターフェイスクラスを作成するだけの価値があるかどうかを判断する必要があります。

0

モックは、お互いにサービスを提供するオブジェクトを扱うのに最適です。モックの期待は、それらの関係を記述します。価値オブジェクトを嘲笑することにはあまり意味がありません。

関連する問題