動作をテストしたい保護されたメソッドを持つシールされたクラスがあります。これにより、直接テストすることも、モックすることも難しくなります。
これは、TDD 方式で開発されていないコードベースにあり、現在、特定の機能の単体テストを追加しています。
この場合、可能な一般的なアプローチは何ですか? 現時点で私は持っています:
- クラスをアンシールします。次に、テスト コード内のクラスから派生したプロキシまたはアダプターを作成して、保護されたメソッドへのアクセスをトンネリングします。
- 保護されたメソッドの動作をデリゲート/ファンクターに分解し、再注入します。次に、除外された動作を個別にテストします。
- 保護されたメソッドを使用する継承階層で最も近いパブリック メソッドを呼び出してテストします。多くのモッキングにつながる可能性があり、テスト対象のコード以外のコードが変更されたときにリスクにさらされる可能性があり、脆弱なテストが作成されます。
- リフレクションを使用して、保護されたメソッドにアクセスします。次に、直接呼び出します。
もうありますか?