JUnit + EasyMock(5)

今回はメソッドの呼び出し回数の設定について書きます。
いままでメソッド呼び出しの設定は以下のように書いていました。

barMock.func1( arg1 );
mockControl.setReturnValue( barFunc1Result );
  
  or

mockControl.expectAndReturn( barMock.func1( arg1 ), barFunc1Result );

例外については以下。

barMock.func1( arg1 );
mockControl.setThrowable( new HogeException() );

  or

mockControl.expectAntThrow( barMock.func1( arg1 ), new HogeException() );

これらの記述ですが、指定されたメソッドが1回だけ呼び出される設定になっています。
#複数回記述すればその回数呼び出される設定になります。

これですと複数回の呼び出しを設定する場合に不便なので、そのためのメソッドが用意されています。
メソッド名は同じで、引数として呼び出し回数を指定する形になります。

たとえば func1 を 10 回呼び出す設定の場合は以下のように記述します。

barMock.func1( arg1 );
mockControl.setReturnValue( barFunc1Result, 10 );

  or

mockControl.expectAndReturn( barMock.func1( arg1 ), barFunc1Result, 10 );

この場合、引数に arg1 が渡されて func1 が 10 回呼び出されることを設定します。また、いずれの呼び出しでも戻り値は barFunc1Result になります。

また、呼び出し回数を 10 回固定にするのではなく、ある範囲内で設定する場合は以下のように記述します。

barMock.func1( arg1 );
mockControl.setReturnValue( barFunc1Result, 5, 10 );

上記例の場合は 5〜10 回呼び出されることを設定します。

これらの回数指定以外にも Range クラスを使用して回数を設定する方法もあります。
使用可能な Range クラスの値が MockControl にいくつか定義されています。

  • ONE 1 回
  • ONE_OR_MORE 1 回以上
  • ZERO_OR_MORE 0 回以上
barMock.func1( arg1 );
mockControl.setReturnValue( barFunc1Result, MockControl.ZERO_OR_MORE );

上記使用例では、0 回以上の呼び出しを設定しています。
ZERO_OR_MORE や ONE_OR_MORE の指定は、呼び出しについての検証はほとんど行なわないで単にモックオブジェクトとして使用するような意味合いが強いように思えます。

例外を送出する設定についても同様に行なえます。


以上、呼び出し回数についてのメモでした。
早いところ引数チェックについてのメモを書きたい・・・けど時間がorz。
あと、jMock も試してみたい鴨。