- 追加された行はこの色です。
- 削除された行はこの色です。
よくある
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) {
}
};
ってところをどうにかできないかなあって話です。
ようするにこれ、振る舞いをいちいち書くのがめんどくさいわけで、振る舞いをライブラリを使って楽しよう!ってのがテーマです。