私はPersonのような単純でほぼ価値のあるクラスを持っています:
class Person
{
public:
Person(ThirdPartyClass *object);
virtual ~Person(void);
virtual std::string GetFullName() const;
virtual int GetAge() const;
virtual int GetNumberOfDaysTillBirthday() const;
};
サードパーティのライブラリを使用していますが、それを破棄するには、(サードパーティのライブラリの一部である)というThirdPartyClass
グローバル/静的関数を呼び出す必要があります。Destroy
このDestroy
関数は、Personデストラクタで呼び出されます。
現在、Personクラスの単体テストを試みていますが、メソッドをモック/スタブするDestroy
方法が必要です。静的Destroy
関数の周りにラッパークラスを記述し、依存性注入を使用してこのラッパーをPersonクラスに注入できると思いますが、この単純なクラスでこの1つの関数を呼び出すだけではやり過ぎのようです。これを行うための簡単で簡単な方法は何ですか?それとも、依存性注入は本当にこれを行うための最良の方法ですか?
アップデート
最終的には、サードパーティライブラリのすべてのグローバル関数をラップするクラスを作成し、依存性注入を使用してこのクラスをpersonクラスのコンストラクターに渡すことにしました。このようにして、Destroyメソッドをスタブすることができます。個人クラスは単一の関数のみを使用しますが、ライブラリの他の関数はコードの他のポイントで呼び出され、それらをテストする必要があるため、同じ問題に直面します。
メインのアプリコードでこのラッパークラスの単一インスタンスを作成し、必要に応じて挿入します。わかりやすいと思うので、このルートを選びました。Billy ONealのソリューションが好きで、それが私の質問に答えると思いますが、コードを数か月残して戻ってきた場合、依存性注入と比較して、何が起こっているのかを理解するのに時間がかかることに気付きました。「明示的は暗黙的よりも優れている」というPythonの格言の禅を思い出します。依存性注入により、何が起こっているのかがもう少し明確になると思います。