LoginSignup
20
20

More than 5 years have passed since last update.

Javaの単体試験におけるモックの活用メモ EasyMock、PowerMock

Last updated at Posted at 2012-06-23

初qiitaです

概要 Mockをつかってテストを簡単にしよう

Javaのテストを書く際、依存しているものがあるとシンプルにテストを書けない。そうしたときにMockを利用することで試験できるようになる。

外部APIとかStrutsのDynaActionFormとか、単純にインスタンス化できないものをMock化してテストできると便利!

サンプル

CreateScreenTest.java
import junit.framework.TestCase;
import org.easymock.EasyMock;
import java.io.IOException;

public class CreateScreenTest extends TestCase {
    public void testInit() throws IOException {
        Item item = new Item("test");       

        HttpServletRequest mock = EasyMock.createMock(HttpServletRequest.class);
        //単純にインスタンス化できないもののmockをつくる。

EasyMock.expect(mock.getAttribute("Item")).andReturn(item);
        //そのmockクラスのメソッドを使用している箇所でなにをReturnしたいか書く

        EasyMock.replay(mock);

        JB jb = new JB();
        jb.init(mock);

        //assertなテストを書いていく
    }
}

クラス名などは架空のものです為念

EasyMock参考ページ

EasyMockについてはけっこう日本語のページも多いので簡単
-EasyMockをつかってみた
-http://den2sn.hatenablog.com/entry/20090324/1237854455
-EasyMock を使用してテストを容易にする (IBM developerWorks)
-http://www.ibm.com/developerworks/jp/java/library/j-easymock.html

staticやfinalなメソッドをテストする

EasyMockは簡単で便利。でも、staticやfinalなクラスやメソッドはうまく使えない。(調査不足もあるかも)
そんなときはPowerMockを使う。

PoweMock参考ページ

-Mockito + PowerMockを使ってみる
-http://d.hatena.ne.jp/torutk/20101003/p3

次のページのサンプルコードはなぜか動かなかった
-http://blog.tarotaro.org/archives/772

PoweMockでつまっているところ

staticだけであったり、finalだけなら動くのだけれど、
static finalなものは動かない。
「cannot subclass final class」エラーがでるのだけど、JUnitのテストケースにすると動く、不思議。
英語のページではいろいろ書いてあるけれど、ちょっと調査中。

その他、気になったこと

理想

すべてのソースにテストが書かれていて、ソースを修正するたびにテストできる。

現実

(禁則事項です)

リスク

-当然だけれどMockを使うと結合部分は試験できないのでどこまで試験できているか確認しましょう。
-どうすれば効率的ないい試験を書けるかは検討中(あまり体系立って調べてはいない)

テスト駆動開発の2側面

-初期開発の段階では、どういった機能が必要か明確になる。
-保守・追加開発の段階では、ソースの修正でどこも壊れていないか確認できる

その他

-qiitaの使い方、こんなんであってるのだろか。
-会社で触ってるコードで詰まったのを、どうqiitaなりブログなりに書くと幸せだろか。
-テストちゃんと勉強しないといけない

20
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
20