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は、先のスタブを効率よく記述するためのライブラリです。実際にコーディングはこんな感じ。 この記事は
現在のアクセス:9645 |