c++ の pImpl イディオムは、クラスのユーザーからクラスの実装の詳細 (= プライベート メンバー) を隠すことを目的としています。ただし、テストの観点から通常は悪いと見なされる、そのクラスの依存関係の一部も隠します。
たとえば、クラス A が、A.cpp からのみアクセスできるクラス AImpl にその実装の詳細を隠し、AImpl が他の多くのクラスに依存している場合、テスト フレームワークがクラス A のメソッドにアクセスできないため、クラス A の単体テストが非常に困難になります。 AImpl に依存関係を注入する方法もありません。
誰もこの問題に遭遇したことがありますか? 解決策を見つけましたか?
- 編集 -
関連するトピックでは、内部ではなく、インターフェイスによって公開されたパブリック メソッドのみをテストする必要があると人々が提案しているようです。そのステートメントを概念的に理解することはできますが、プライベート メソッドを個別にテストする必要があることがよくあります。たとえば、パブリック メソッドが重要なロジックを含むプライベート ヘルパー メソッドを呼び出す場合などです。