モック上のすべてのメソッド呼び出しを一般的な方法でインターセプトすることは可能ですか?私はマッチング法がある別のクラスへ全てメソッド呼び出しを再度方向付けるモックを作成したいMockito - モック上のメソッド呼び出しを代行受信する
public class VendorObject {
public int someIntMethod() {
// ...
}
public String someStringMethod() {
// ...
}
}
:のようなベンダー提供クラスを考慮
例
署名:
public class RedirectedToObject {
public int someIntMethod() {
// Accepts re-direct
}
}
when()。thenAnswer()construc tはMockitoで法案に合っているようですが、どのメソッド呼び出しでもargと一致する方法を見つけることはできません。とにかくInvocationOnMockはこれらすべての詳細を私に与えてくれます。これを行う一般的な方法はありますか?このようになります何か、(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. } } );
がためのオプションではありません既存のコードベースが大きすぎます。
- 非常に重要なアプリケーションの一部です。もちろん
VendorObject vo = mock(VendorObject.class, 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. } });
、頻繁にこのアプローチを使用したい場合は、回答の必要は匿名ではないように:
(vo).thenAnswer(...):O – Karle
「非常に重要なアプリケーションの一部」と同じくらい簡単です。この場合、ラッパーを追加するのとはまったく異なるモック/プロキシオブジェクトを追加する方法はありますか?単体テストや実際のアプリでこれを行うことに興味がありますか? –
@mattb:パフォーマンス面は、ラッパークラスを使用することに対して最大の議論ではありません。元のベンダーオブジェクトと、実際のベンダーオブジェクトに要求を転送する実装クラスに基づいたインタフェースを作成します。このための実行時間は、実際のベンダーオブジェクトと比較して小さくなるでしょう。より重要な議論は、ベンダオブジェクトを直接使用する既存のコードベースです。 – Karle