// 下階層用テンプレート #topicpath ---- //ここにコンテンツを記述します。 #contents **DAOのスタブを書くのがめんどくさい [#j689f327] よくある 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 [#kd6356bf] [[JMock>http://www.jmock.org/]]は、先のスタブを効率よく記述するためのライブラリです。実際にコーディングはこんな感じ。 ---- この記事は #vote(おもしろかった[1],そうでもない[2]) #vote(おもしろかった[1],そうでもない[3]) - mockitoも結構いいですよ。 -- [[こんぴろ]] &new{2011-02-25 (金) 15:49:07}; #comment #topicpath SIZE(10){現在のアクセス:&counter;}