したがって、テスト対象のクラスには、このように勇敢に見えるコードがあります
public void doSomething(int param)
{
Report report = new Report()
...do some calculations
report.someMethod(someData)
}
私の意図は、レポートの構成を保護されたメソッドに抽出し、それをオーバーライドしてモックオブジェクトを使用し、それをテストして、someMethodが正しいデータで呼び出されたことを確認することでした。
ここまでは順調ですね。しかし、Reportは私の管理下にはなく、さらに悪いことに、実行時にJNIを使用してライブラリをロードします。
レポートレポートを実行する場合=EasyMock.createMock(Report.class)
次に、EasyMockはリフレクションを使用してクラスメンバーを見つけようとしますが、これによりJNIライブラリをロードしようとして失敗します(JNIライブラリはUNIXでのみ使用可能です)。
2つのことを検討しています。a)2つの実装を備えたReportWrapperインターフェイスを導入します。1つは実際のレポート(基本的にはプロキシ)への呼び出しを委任し、もう1つは基本的にモックオブジェクトを使用します。またはb)someMethodを呼び出す代わりに、保護されたメソッドを呼び出します。これにより、テストサブクラスでオーバーライドできるsomeMethodが呼び出されます。
いずれにせよ、それは厄介なようです。より良い方法はありますか?