44

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

public void doCommit() { }

失敗するように伝えるために、次の規則を使用します。

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

ただし、これにより、メソッドは呼び出されるたびにこの例外をスローします。たとえば、1回目と3回目に呼び出されたときにのみスローするようにするにはどうすればよいですか? つまり、たとえば、2 回目と 4 回目は、例外をスローせずに返されるだけです。私は doCommit() の作成者ではなく、変更できるソース コードも持っていないことに注意してください。

4

2 に答える 2

65

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

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

ありがとうイゴール!

于 2010-08-17T00:23:42.877 に答える
21

Stubbing Consecutive Calls docoを読むと、次のようになります。

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

基になるメソッドを実際に呼び出したくない場合は、メソッドthenAnswerの代わりに使用thenCallRealMethodして、空のスタブ実装を提供する必要があります。

于 2010-08-16T23:09:02.257 に答える