Top / Java / JMock

DAOのスタブを書くのがめんどくさい

よくある

View -> BL -> DAO -> DB

の形式で、BLの単体テストを行うときにDAOの実装をどうするかって話があります。DAOの実装をそのまま使うと単体テストにならないし、でもDAOのスタブをいっぱい書くのもめんどくさい。

通常自前でスタブをカリカリ書いていくと、JUnitのテストケースはこんな感じになりますね。

package nu.mine.kino;

import junit.framework.TestCase;

public class SampleBLTest extends TestCase {
    private SampleBL bl; <-テスト対象のBL
    private ISampleDAO mockDao; <-スタブ
    private String input = "hoge";
    @Override
    protected void setUp() throws Exception {
        super.setUp();
        bl = new SampleBL();
    }

    /**
     * {@link nu.mine.kino.SampleBL#getMessage(java.lang.String)} のためのテスト・メソッド。
     */
    public void testGetMessage() {
        // ここでMockなDAOを作成している
        mockDao = new ISampleDAO() {
            public String create(SampleModel newInstance) {
                return null;
            }

            public void delete(SampleModel persistentObject) {
            }

            public SampleModel read(String id) {
                SampleModel sampleModel = new SampleModel();
                sampleModel.setName(id);
                return sampleModel;
            }

            public void update(SampleModel transientObject) {
            }
        };
        // でBLにセット。
        bl.setDao(mockDao);
        // セットされた状態で、単体テスト。
        SampleModel expected = new SampleModel();
        expected.setName("hoge");
        SampleModel actual = bl.getMessage(input);
        assertEquals(modelToString(expected), modelToString(actual));
        // fail("まだ実装されていません。");
    }

    public static String modelToString(SampleModel model) {
        return model.getName();
    }
}

で、この

 mockDao = new ISampleDAO() {
    public String create(SampleModel newInstance) {
        return null;
    }

    public void delete(SampleModel persistentObject) {
    }

    public SampleModel read(String id) {
        SampleModel sampleModel = new SampleModel();
        sampleModel.setName(id);
        return sampleModel;
    }

    public void update(SampleModel transientObject) {
    }
};

ってところをどうにかできないかなあって話です。

ようするにこれ、振る舞いをいちいち書くのがめんどくさいわけで、振る舞いをライブラリを使って楽しよう!ってのがテーマです。

JMock

JMockは、先のスタブを効率よく記述するためのライブラリです。実際にコーディングはこんな感じ。


この記事は

選択肢 投票
おもしろかった 1  
そうでもない 3  
  • mockitoも結構いいですよ。 -- こんぴろ? 2011-02-25 (金) 15:49:07

Top / Java / JMock

現在のアクセス:8164


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-11-16 (水) 13:20:07 (2921d)