いくつかのユニットテストを作成中です。特に、いくつかのプライベートメソッドをテストしたいと考えています。
これまでのところ、私は使用することを思いつきました。
#define private public
しかし、単体テストの観点から見ると、すべてのカプセル化が破壊されるため、これには満足していません。
プライベート メソッドを単体テストするためにどのような方法を使用しますか。
ベストアンサー1
質問で言及されている厄介なハックではなく#define
、テストをテスト対象のクラスのフレンドにするという、よりクリーンなメカニズムがあります。これにより、テスト コード (テスト コードのみ) がプライベートにアクセスでき、他のすべてから保護されます。
ただし、パブリック インターフェイスを介してテストすることが望ましいです。クラス X のプライベート メンバー関数に多くのコードがある場合は、クラス X の実装で使用される新しいクラス Y を抽出する価値があるかもしれません。この新しいクラス Y は、クラス X のクライアントに使用を公開することなく、パブリック インターフェイスを介してテストできます。