スポンサーサイト

-------- --:--:-- --

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【Java】QuickJunitとMockitoを使ってみる

2012-02-07 00:18:02 Tue

■QuickJunit


今エディタでアクティブなクラスに対応する
テストクラスへ切り替えorテストクラス生成を行なってくれるEclipseプラグイン。
切り替えorテストクラス生成はCtrl + 9 です。
http://quick-junit.sourceforge.jp/
http://www.atmarkit.co.jp/fjava/rensai4/devtool16/devtool16_1.html


■MockitoとPowerMockとは?


モックを簡単に作成してUnitTestを効率化させてくれるライブラリ。
はじめは、うん?って思ったけどすげーよかった。
DBUnitとかJWebUnitはUnitTestとしては本質的ではないということが身にしみた。
例えばデータベースにアクセスするDAOクラスのメソッド、
戻り値がテーブルへのレコード追加件数だったとすると、
このメソッドの戻り値をモック化させておいてメソッド実行時にモックとして定義した戻り値を戻す
ということができます。
また、HTTP経由で他サーバのAPIを呼び出してJSONやXMLを取得するようなI/Oも
モック化させてモック化のときに定義してしたJSONやXMLを戻り値として戻するというこもできます。
その意味で、データベースなど各種ミドルウェアのINとOUTをモック化して
「本当」の単体テストを行うことができます。

MockitoとPowerMockの違いは、私の理解の範囲で言うと



  • PowerMockはstaticメソッドをMock化できる

  • PowerMockはMock化したstaticメソッドを評価できる


これが大きな違いだと思います。
違う、といってもPowerMock > Mockito で、
実際「powermock-mockito-junit」をDLすれば両方使えます。
誤解を恐れずに言うと、PowerMockはMockitoに機能追加するライブラリ、と言えるかと思います。

あと、PowerMockを使うようなしている方がおかしいと指摘されている方もおられました。
http://hikozaemonchan.blogspot.com/2009/05/mockito.html
何故ダメなのか今の私では理解できませんでした。
シングルトンとかファクトリーパターンを使うとどうしてもPowerMockのお世話になるかと思います。


■MockitoとPowerMockitoをDLする


DLは下記から「powermock-mockito-junit-1.4.11.zip」を選択する。
http://code.google.com/p/powermock/downloads/list

ここでしょうもなくハマったのが、easymock用とmockito用の2つがpowermockとして提供されていること。
mockitoを使っているのにeasymock用をDLして困ってしまった。
しょうもないハマりかたをしてしまいました…。

先程も述べましたが、「powermock-mockito-junit-1.4.11.zip」をDLすれば、
その中にMockito本体である「mockito-all-1.9.0.jar」も含まれています。

使い方は下記。
http://code.google.com/p/powermock/wiki/MockitoUsage13
http://d.hatena.ne.jp/mokkouyou2001/20110330/1301484814


■ハマったこと


ライブラリのところから躓いたワケですが、その後もハマりましたので対応をメモしておきます。



  • PowerMockで使用する@RunWith(PowerMockRunner.class)と
    PowerMockでstaticメソッドを持ちアクセスすることになるクラスを宣言する@PrepareForTest({Static1.class, Static2.class})は、
    クラスレベルでアノテーションを付与する

  • @PrepareForTest({Static1.class, Static2.class})はstaticメソッドを持つクラスを列挙し、
    これは配列型{clazz, clazz, clazz...}で宣言する

  • staticメソッドの実行回数確認(verify)は下記のステートメントで有効。
    スタティックなメソッドごとに呼び出し回数を確認できる
    verifyStatic(Mockito.times(1)); // 下記のメソッドの呼び出し回数の検証値を設定
    Static1.staticMethod((java.sql.Connection)anyObject()); // 呼び出し回数を確認するメソッド

  • PowerMockではないMockitoのverifyは下記のようにする。
    Mockito.verify(daoMock, Mockito.never()).insert((Entity)anyObject());



参考URL
http://tech.cm55.com/wiki/mockito/Manual
http://d.hatena.ne.jp/mokkouyou2001/20090721/1248164082
http://d.hatena.ne.jp/torutk/20101003/p3
http://d.hatena.ne.jp/Naotsugu/20101109/1289304795


スポンサーサイト

⇒comment

Secret

名言集
全記事(数)表示
全タイトルを表示
ブログ内検索
Loading
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。