濃縮還元オレンジニュース

シンプル&タイプセーフなJava用モックライブラリ「Mockito」

この記事を読むのに必要な時間:およそ 0.5 分

Javaのモックライブラリ「Mockito」の紹介記事です。Javaのモックライブラリとして「JMock」「EasyMock」が有名ですが,APIにクセがあったり独特の手順を踏まないといけないなど,使いやすいとは言えませんでした。後発のMockitoではこれらの問題を解消しており,直感的な記述でモックの挙動を設定できます。

記事では1.8.0 RC2のバージョンを使っています。本稿執筆時点(2009年7月末)では1.8.0がリリースされていますが,1.8.0でも大きな違いはありません。

例ではDAO(Data Access Object)を使って商品を取得し,価格を計算するというサンプルを示しています。価格計算を行うクラスCalcuratorをテストしたいとすると,実際のケースではDAOはDBにアクセスするためテストデータを用意しなければならず面倒です。そこでモックを使ってDAOをDBアクセスなしに使えるようにして,テストできるようにします。MockitoでDAOのモックを作成する場合mockメソッドを使います。

ItemDao mock = mock(ItemDao.class);

そしてDAOのメソッドであるfindItem( )をどういう引数で呼び出したとき(when)にどういう値が返ってくるのか(thenReturn)を設定します。

when(mock.findItem(1)).thenReturn(
new Item(1, "WEB+DB PRESS", 1480));

後は通常どおりにテストを行い,最後にfindItem( )が正しい引数で呼び出されたかを検証(verify)します。

verify(mock).findItem(1);

Mockitoでは,実装クラスの特定の動作を置き換えるspyメソッドや,1.8から利用できる//given,//when,//thenというコメントを使ってBDD(振舞駆動開発)スタイルに記述する機能なども備わっています。Java開発をしていてまだMockitoを触ったことがない人は,ぜひ試してみることをお勧めします。

URLhttp://journal.mycom.co.jp/articles/2009/07/17/mockito/

著者プロフィール

角田直行(かくだなおゆき)

普段はお仕事でPHPやJavaを使ってWeb開発をしています。一部でセレブエンジニアとか言われてますが,全然セレブじゃありません。

コメント

コメントの記入