C++ でのプライベートメソッドの単体テスト 質問する

C++ でのプライベートメソッドの単体テスト 質問する

いくつかのユニットテストを作成中です。特に、いくつかのプライベートメソッドをテストしたいと考えています。

これまでのところ、私は使用することを思いつきました。

#define private public

しかし、単体テストの観点から見ると、すべてのカプセル化が破壊されるため、これには満足していません。

プライベート メソッドを単体テストするためにどのような方法を使用しますか。

ベストアンサー1

質問で言及されている厄介なハックではなく#define、テストをテスト対象のクラスのフレンドにするという、よりクリーンなメカニズムがあります。これにより、テスト コード (テスト コードのみ) がプライベートにアクセスでき、他のすべてから保護されます。

ただし、パブリック インターフェイスを介してテストすることが望ましいです。クラス X のプライベート メンバー関数に多くのコードがある場合は、クラス X の実装で使用される新しいクラス Y を抽出する価値があるかもしれません。この新しいクラス Y は、クラス X のクライアントに使用を公開することなく、パブリック インターフェイスを介してテストできます。

おすすめ記事