私のC++コードを単体テストできるようにするために、私は通常、テスト中のクラスのコンストラクタを "実動コード"または擬似/モックオブジェクトのいずれかにすることができますこれらの注入オブジェクト)。私はどちらでもこれを行ったC++の依存関係注入のためのテンプレート
- "プロダクションコード"クラスと偽/モッククラスの両方が継承するインターフェイスを作成します。
- テスト対象のクラスを、テンプレートパラメータとして注入オブジェクトの型とコンストラクタへのパラメータとしての注入オブジェクトのインスタンスをとるテンプレートクラスにします。
いくつかのランダムな思考:
- は、我々は概念を(C++ 0xの)持ってまで、唯一のドキュメントとパラメータの命名は、(テンプレートを使用している場合)、テスト中のクラスを提供するために、どのようなヒントします。
- これは、レガシーコードのためのインタフェースを作成することができるとは限らない インタフェースは基本的に、同じようにして、依存性注入
- を行うことができるように作成され
- :テスト対象のクラスには、依存性注入を可能にするためだけに行われるテンプレート
あなたの考えは?この問題の他の解決策はありますか?
これはとても単純ですが、本当に強力です。私はそれが好きです! –
ちょうど記録のために、メソッドは仮想(非仮想インターフェイス(NVI)イディオムを参照してください)に問題があることを認識する必要があります –
はい、時にはこのアプローチは "純粋なNVI"と競合することがあります。多くの場合、保護された仮想関数だけを嘲笑することで逃げることができますが、公開されている非仮想インタフェースを模倣する必要がある場合は、公開仮想化してNVIを使用するにはあまりにも害を与えません。このケースでは、ベストプラクティスのコンパイラー強制が失われますが、ベストプラクティス自体は失われます。 –