質問

私は現在、数年前に始まった既存のC ++プロジェクトに単体テストを追加する作業はかなり新しいソフトウェア開発者です。非技術的な理由のために、私は、既存のコードを変更することはできませんよ。すべての私のモジュールの基本クラスは、データの取得/設定し、他のモジュールと通信するための方法の束を持っています。

私は、個々のモジュールのテストユニットにしたいので、

、私はすべてのモジュール間の通信方式用の缶詰値を使用できるようにしたいです。即ち他のモジュールがアクティブな場合、私はそれが一種のテストの私がやっているものに基づいてtrueまたはfalseを返すようにしたいのチェック方法のPing()のために。私はGoogleのテストとGoogleモックに見てきた、そしてそれは非仮想メソッドをサポートからかうん。しかしアプローチが記述( http://code.google.com/p/googlemock/ウィキ/クックブック#Mocking_Nonvirtual_Methods の)は、元のメソッドは、いずれかの実数またはモックオブジェクトに取るために「テンプレート化」に私を必要とします。私はこれらの仮想メソッドをモックの他のいくつかの方法が必要ですので、私は、原因前述の要件に移動して、基本クラスの私のメソッドをテンプレート化することはできません。

基本的に、私はモックとしたい方法は、私はユニットテストするモジュール、いくつかの基本クラスであり、そのベースクラスのクラスを派生するのモックを作成します。私がテストしたいというのが私の基本モジュールのクラスとモジュール間の中間のモジュールがあります。

私はどんなアドバイスをいただければ幸いです!

おかげで、

JW

編集:Aより具体的な例

私の基底クラスは、私がテストしたいモジュールがleafModuleで、rootModuleを言うことができますです。中間モジュールこの中間モジュールからrootModuleから継承、leafModuleの継承があります。

私のleafModuleでは、私はrootModuleクラスで定義された非仮想のGetStatus(moduleNameの)を呼び出しdoStuff()メソッドを、テストしたいです。私は何とか選ばれた缶詰の値を返すためのGetStatus()を作成する必要があります。モッキングはそうでも適切なアプローチをモックオブジェクトを使用している、私に新しいのですか?

役に立ちましたか?

解決

私は、元のソースツリーに読み込み、別のディレクトリに嘲笑のソースツリーを書き出すのPerl / Rubyの/ Pythonスクリプトを記述します。あなたは、関数定義を交換するために、完全に解析C ++にはありません。

他のヒント

非仮想関数を置き換えるいくつかの異なる方法があります。一つは再宣言して、あなたがテストしたい非仮想関数のそれぞれ異なるセットのための新しいテスト実行可能ファイルをコンパイルすることです。それはほとんどスケーラブルです。

2番目のオプションは、テストのためにそれらを仮想的にすることです。ほとんどのコンパイラは、あなたがそれをテスト中かではありませんかどうかに応じて、それらを仮想または通常のいずれかにするために仮想または-DTEST_VIRTUAL = -DTEST_VIRTUALを使用してコードをコンパイルし、コマンドライン上で何かを定義することができます。

は使用可能である第三のオプションを使用すると、非仮想関数を模擬することができますモックフレームワークを使用することです。私は(中立性に関してなどと免責事項)HippoMocksの作者だと我々は最近、X86プラットフォーム上でプレーンなC関数を模擬する機能を追加しました。これは仕事のビットと非仮想メンバ関数に拡張することができ、あなたが探しているものだろう。あなたのコンパイラは、それはそれをインライン化し、モックが失敗する可能性があることことを一度に使用して、関数の定義の両方を見ることができれば、ということを覚えておいてください。すなわち、ヘッダに定義された関数に対して特に成り立つ。

それが今であるとして

は、通常のC関数モックがあなたのために十分である場合、あなたはそれを使用することができます。

一つのアプローチ

は、テストのためのさまざまなソースを指定することです。あなたの生産目標はrootModule.hとrootModule.cppを使用していますと言います。あなたのテストターゲットの異なるソースを使用してください。あなたは、#include「rootModule.h」は、実際にユニットテスト/ rootModule.hをロードするようにすることを、あなたのインクルードパスを変更して別のヘッダーを指定することができます。そして、あなたの心のコンテンツへのモックrootModuleます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top