2017-08-23 11 views
2

少し単純化すると、私たちのシステムは2つの部分を持つ。 「私たちの」パートは、別のチームによって実装された低レベルのパートを(同じコードベース内で)使用します。私たちは、スパイオブジェクトの下位レベルにエントリポイントをラップする、かなり複雑な機能テストの設定をしています。肯定的なテストでは、そのレベルの実際の実装を使用しますが、事前定義されたエラーで失敗する呼び出しを模擬します。Mockitoで実際のメソッドを呼び出すが、結果を傍受する

ここでは、複雑なシナリオのサポートを追加しようとしています。ここでは、(疑似時計上で)下位レベルの呼び出しに人為的な遅延を追加したいと考えています。これを行うには、(1)実際の実装を呼び出す(2)返される結果のFutureオブジェクトを取得し、それに応じて遅延を挿入するカスタム関数と組み合わせるモックを定義したいと思います。だから理想的に私は次のようなものを持っています:

doAnswer(invocationOnMock -> 
    { 
     result = call real method on mySpy; 
     return Futures.combile(result, myFunction); 
    }).when(mySpy).myMethod(); 

私はそれをどのようにして達成できますか?それはあなたがあなたのスパイオブジェクトを初期化するときだけ読み取りオブジェクトへのリンクを保存するための最も最も簡単な方法は、私にとってとして

+0

おそらくこれはあなたが探しているものです: https://stackoverflow.com/questions/12813881/can-i-delay-a-stubbed-method-response-with-mockitoまたはこれ:https:// stackoverflow .com/questions/33484328/can-i-use-mockito-to-insert-a-delay-and-then-call-the-real-method –

答えて

1

doAnswer(invocation -> realFoo.getSome() + "spyMethod").when(spyFoo).getSome(); 

Foo realFoo = new Foo(); 
Foo spyFoo = Mockito.spy(realFoo); 

今、あなたはこのようにそれをスタブすることができますもう一つの方法は、invocation.callRealMethod()を呼び出すことです:

doAnswer(invocation -> invocation.callRealMethod() + "spyMethod").when(spyFoo).getSome(); 

しかし、この場合には、あなたはキャストする必要があるかもしれません戻り値はinvocation.callRealMethod()で、返り値はObjectです。

関連する問題