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