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 がキャッチされるかを確認しています。