2 つのメソッドを持つインターフェースがあるとします。
public interface MyInterface {
public SomeType first();
public SomeType second();
}
このインターフェイスは によって実装されMyInterfaceImpl
ます。実装内で、いくつかの結果を取得するためのfirst()
呼び出し。second()
first()
次のような、 から出てくるものに基づいてから出てくるものをアサートする単体テストを作成したいと思いsecond()
ます。
1 public class MyInterfaceTest {
2 private MyInterface impl = new MyInterfaceImpl();
4 @Test
5 public void testFirst() {
6 // modify behaviour of .second()
7 impl.first();
8 assertSomething(...);
10 // modify behaviour of .second()
11 impl.first();
12 assertSomethingElse(...);
13 }
14 }
2
選択したメソッド (例: first()
) へのすべての呼び出しが直接呼び出される (委任されたMyInterfaceImpl
) 一方で、他のいくつかのメソッド (例: second()
) が対応するモックに置き換えられるように、ライン上でモックを作成する簡単な方法はありますか?
これは実際には静的メソッドの PowerMock で非常に簡単に実行できますが、動的メソッドには同様のものが必要です。
に基づくソリューション
MyInterface mock = EasyMock.createMock(MyInterface.class);
MyInterface real = new MyInterfaceImpl();
EasyMock.expect(mock.first()).andReturn(real.first()).anyTimes();
EasyMock.expect(mock.second()).andReturn(_somethingCustom_).anyTimes();
多くのメソッド (多くのボイラープレート) を持つインターフェイスの場合は特に、十分ではありません。real
実際には他のモックに依存するため、転送動作が必要です。
このようなものは、自分のクラスではなく、フレームワークによって処理されることを期待しています。これは達成可能ですか?