よくある
 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) {
     }
 };
ってところをどうにかできないかなあって話です。

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

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS