Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

初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なりブログなりに書くと幸せだろか。
-テストちゃんと勉強しないといけない

daik
やっています。ユーザの問題を解決できるプロダクトをつくっていきたい。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away