一般的な方法でモックのすべてのメソッド呼び出しを傍受することは可能ですか?
例
次のようなベンダー提供のクラスがあるとします。
public class VendorObject {
public int someIntMethod() {
// ...
}
public String someStringMethod() {
// ...
}
}
すべてのメソッド呼び出しを、一致するメソッド シグネチャがある別のクラスにリダイレクトするモックを作成したいと思います。
public class RedirectedToObject {
public int someIntMethod() {
// Accepts re-direct
}
}
Mockito の when().thenAnswer() コンストラクトは目的に合っているようですが、任意のメソッド呼び出しと任意の引数を一致させる方法が見つかりません。とにかく、InvocationOnMock は確かにこれらすべての詳細を提供してくれます。これを行う一般的な方法はありますか?when(vo.*) を適切なコードに置き換えると、次のようになります。
VendorObject vo = mock(VendorObject.class);
when(vo.anyMethod(anyArgs)).thenAnswer(
new Answer() {
@Override
public Object answer(InvocationOnMock invocation) {
// 1. Check if method exists on RedirectToObject.
// 2a. If it does, call the method with the args and return the result.
// 2b. If it does not, throw an exception to fail the unit test.
}
}
);
モックを簡単にするためにベンダー クラスの周りにラッパーを追加することは、次の理由からオプションではありません。
- 既存のコード ベースが大きすぎます。
- 非常にパフォーマンスが重要なアプリケーションの一部。