- 追加された行はこの色です。
- 削除された行はこの色です。
// 下階層用テンプレート
#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],そうでもない[0])
#vote(おもしろかった[1],そうでもない[1])
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}