モックされたメソッドが初めて呼び出された場合にのみ例外をスローする方法は?

StackOverflow https://stackoverflow.com/questions/3498072

  •  29-09-2019
  •  | 
  •  

質問

複数回呼び出すことができるモックされたオブジェクトの方法があります(再帰を考えてください)。この方法は次のように定義されています。

public void doCommit() { }

失敗するように言うために、私はこの慣習を使用します。

doThrow(new RuntimeException()).when(mMockedObject).doCommit();

ただし、これにより、この例外が呼び出されるたびにこの例外を投げます。たとえば、それが最初と3回目と呼ばれる3回目だけを投げるように、どうすれば作ることができますか?つまり、たとえば、例外を投げずに戻る2度目と4回の時間があります。私はdocommit()の著者ではなく、変更できるソースコードもありません。

役に立ちましたか?

解決

私はそれを理解しました(イゴールからのいくつかのヒントがあります)。これは、連続したvoidメソッド呼び出しをスタブする方法です。

doThrow(new RuntimeException()).doNothing().doThrow(...).doNothing().when(mMockedObject).doCommit();

イゴールに感謝します!

他のヒント

読む 連続してドコに電話をかける, 、このようなことはそれをするかもしれません:

when(mMockedObject.doCommit())
  .thenThrow(new RuntimeException())
  .thenCallRealMethod() 
  .thenThrow(new RuntimeException())
  .thenCallRealMethod();

基礎となる方法を実際に呼びたくない場合は、使用する必要があります thenAnswer それ以外の thenCallRealMethod 方法と空のスタブのimlementationを提供します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top