私はかなり新しいソフトウェア開発者で、現在、数年前に開始された既存の C++ プロジェクトに単体テストを追加する作業を行っています。技術的な理由ではないため、既存のコードを変更することはできません。私のすべてのモジュールの基本クラスには、データの設定/取得、および他のモジュールとの通信のためのメソッドがたくさんあります。
個々のモジュールごとに単体テストを行いたいだけなので、すべてのモジュール間通信方法に既定の値を使用できるようにしたいと考えています。つまり、別のモジュールがアクティブかどうかをチェックする Ping() メソッドの場合、実行しているテストの種類に基づいて true または false を返すようにしたいと考えています。私は Google Test と Google Mock を調べてきましたが、非仮想メソッドのモックをサポートしています。ただし、説明されているアプローチ ( http://code.google.com/p/googlemock/wiki/CookBook#Mocking_Nonvirtual_Methods ) では、元のメソッドを「テンプレート化」して、実際のオブジェクトまたはモック オブジェクトを取り込む必要があります。前述の要件により、基本クラスでメソッドをテンプレート化することができないため、これらの仮想メソッドをモックする別の方法が必要です
基本的に、モックしたいメソッドはいくつかの基本クラスにあり、単体テストしてモックを作成したいモジュールはその基本クラスの派生クラスです。ベース Module クラスとテストしたいモジュールの間に中間モジュールがあります。
アドバイスをいただければ幸いです。
ありがとう、
JW
編集:より具体的な例
私の基本クラスはrootModuleと言えます。テストしたいモジュールはleafModuleです。rootModule を継承する中間モジュールがあり、leafModule はこの中間モジュールを継承します。
私の leafModule では、rootModule クラスで定義された非仮想 GetStatus(moduleName) を呼び出す doStuff() メソッドをテストしたいと考えています。どういうわけか GetStatus() を作成して、選択した定型値を返す必要があります。モッキングは私にとって初めてのことですが、モックオブジェクトを使用することは正しいアプローチですか?