複数回呼び出せるモックオブジェクトのメソッドがあります(再帰を考えてください)。メソッドは次のように定義されています。
public void doCommit() { }
失敗するように伝えるために、この規則を使用します。
doThrow(new RuntimeException()).when(mMockedObject).doCommit();
ただし、これにより、メソッドが呼び出されるたびにこの例外がスローされます。たとえば、最初と3回目に呼び出されたときにのみスローされるようにするにはどうすればよいですか?つまり、たとえば、2回目と4回目は例外をスローせずに戻るだけです。私はdoCommit()の作成者ではなく、変更可能なソースコードも持っていないことに注意してください。
私はそれを理解しました(イゴールからのいくつかのヒント付き)。これは、連続したvoidメソッド呼び出しをスタブする方法です。
doThrow(new RuntimeException()).doNothing().doThrow(...).doNothing().when(mMockedObject).doCommit();
イゴールに感謝!
読み取り 連続呼び出しdoco を読むと、次のようなものがそれを行う可能性があります。
when(mMockedObject.doCommit())
.thenThrow(new RuntimeException())
.thenCallRealMethod()
.thenThrow(new RuntimeException())
.thenCallRealMethod();
基本となるメソッドを実際に呼び出したくない場合は、 thenAnswer
メソッドの代わりに thenCallRealMethod
を使用し、空のスタブを提供する必要があります移住。