JUnit + EasyMock(4)

疲れがぬけてないんで、今日は例外を送出する方法だけ。つっても、EasyMock の JavaDoc みればすぐわかると思いますが(汗


任意のメソッド呼び出しで、値を返すのではなく例外を送出するには MockControl#setThrowable メソッドを使用します。
例外を送出したいメソッドの呼び出しに続いて setThrowable メソッドを呼び出すことで、例外を送出することが記録されます。

MockControl mockControl = MockControl.createMock( IBar.class );
IBar barMock = (IBar)mockControl.getMock();

barMock.barFunc1( "引数" );
mockControl.setThrowable( new HogeException() );// barFunc1 の呼び出しで HogeException を送出

mockControl.replay();

上記例で barMock の barFunc1 を呼び出すと HogeException が送出されるように設定されました。
赤文字になっている箇所は1行にまとめることも出来ます。

mockControl.expectAndThrow( barMock.barFunc1( "引数" ), new HogeException() );

では実際にテストケースを書いた例を以下に。使用しているクラスとインタフェースは12/8のブログを参照してください。

public class BarTest extends TestCase {
  private Foo target;
  private IBar barMock;
  private MockControl mockControl
  protected void setUp() {
    target = new Foo();
    mockControl = MockControl.createControl( IBar.class );
    barMock = mockControl.getMock();
    target.setBar( barMock );
  }

  public void testFooFuncMethod_throwHogeExceptionCase() throws Exception {
    // モックオブジェクトの設定
    String arg1 = "(*´д`*)ハァハァハァアハァ";
    HogeException thrownException = new HogeException();

    mockControl.expectAndThrow( barMock.barFunc1( arg1 ), thrownException );
    mockControl.replay();
    
    // テスト対象メソッドの呼び出し
    try {
      target.fooFunc( arg1, null );// (1)
      fail( "HogeException が送出されるはずなのでこの行は実行されないはず。" );
    }
    catch( HogeException ex ) {
      assertEquals( thrownException, ex );
    }
  }
}

(1)の fooFunc メソッドは barMock.barFunc1 メソッドの呼び出しで送出される HogeException がそのまま送出されてくるはずです。
そのため、catch 句で HogeException がキャッチされるかを確認しています。