まずは・・・
DAOの充実をちゃっちゃとやってしまいましょう
とりあえずupdate、getAll、deleteをやりましょう。
やるといってもインターフェースをいじってテストケースを書けばいいからラクラク〜♪
というわけで変更後のインターフェースはこんな感じ。
public interface BelongToDao { public Class BEAN = BelongToEntity.class; public int insert(BelongToEntity belongToEntity); public BelongToEntity getBelongToEntity(int belongToCode); public static final String getBelongToEntity_ARGS = "BELONGTOCODE"; public int update(BelongToEntity belongToEntity); public int delete(BelongToEntity belongToEntity); //public int deleteByCode(int belongToCode); //public static final String deleteByCode_ARGS = "BELONGTOCODE"; public List getAllEntity(); }
んでそれに対するテストを書きまくる。
ところが、deleteByCodeのテストを書いて実行したらこう言われた。
- [EDAO0006](public abstract int redrisefirm.seasar.s2dao.dao.BelongToDao.deleteByCode(int))は不正です。引数は1つでBeanの型と一致しなければなりません。
つまりこれを実装したければ指定したSQLを発行する用に記述する必要があるということらしい。
ということでインターフェースからdeleteByCodeとdeleteByCode_ARGSをコメントアウトする。
んでテストクラスは↓こんな感じ(前日に書いた分は省略)
public class BelongToDaoTest extends S2TestCase { private BelongToDao belongToDao = null; protected void setUp() throws Exception { //DAOのダイコンファイルを読み込んでおく include("redrisefirm/seasar/s2dao/dao.dicon"); //DAOを取得する belongToDao = (BelongToDao) getComponent(BelongToDao.class); } private void setInitialData() { //初期データを読み込む readXlsReplaceDb("redrisefirm/seasar/s2dao/util/getBelongToResult.xls"); } ・・・中略(前日分)・・・(本日追加分ここから) public final void testInsertDoubleTx() { //初期データを読み込む setInitialData(); //insert用のentityを作成 BelongToEntity belongToEntity = new BelongToEntity(); belongToEntity.setBelongToCode(1); belongToEntity.setBelongToName("デラーズフリート"); try { //実行 belongToDao.insert(belongToEntity); } catch (SQLRuntimeException e) { //ここにくるのが正しい } catch (Throwable e) { e.printStackTrace(); fail(e.getMessage()); } } public final void testUpdateTx() { //初期データを読み込む setInitialData(); //update用のentityを作成 BelongToEntity updateEntity = new BelongToEntity(); updateEntity.setBelongToCode(1); updateEntity.setBelongToName("ティターンズ"); //実行 belongToDao.update(updateEntity); //答え合わせ BelongToEntity answerEntity = belongToDao.getBelongToEntity(1); assertEquals("更新されてません", updateEntity, answerEntity); } public final void testUpdateEffectRangeTx() { //初期データを読み込む setInitialData(); //update用のentityを作成 BelongToEntity updateEntity = new BelongToEntity(); updateEntity.setBelongToCode(1); updateEntity.setBelongToName("ティターンズ"); //実行 belongToDao.update(updateEntity); //答え合わせ BelongToEntity answerEntity = belongToDao.getBelongToEntity(2); assertEquals("値が違います", 2, answerEntity.getBelongToCode()); assertEquals("値が違います", "ジオン公国", answerEntity.getBelongToName()); } public final void testUpdateOutNumberTx() { //初期データを読み込む setInitialData(); //update用のentityを作成 BelongToEntity updateEntity = new BelongToEntity(); updateEntity.setBelongToCode(99); updateEntity.setBelongToName("ティターンズ"); try { //実行 belongToDao.update(updateEntity); } catch (NotSingleRowUpdatedRuntimeException e) { //ここにくるのが正しい } catch (Throwable e) { e.printStackTrace(); fail(e.getMessage()); } } public final void testDeleteTx() { //初期データを読み込む setInitialData(); //delete用のentityを取得 BelongToEntity deleteEntity = belongToDao.getBelongToEntity(2); //実行 belongToDao.delete(deleteEntity); //取れなければOK BelongToEntity confirmEntity = belongToDao.getBelongToEntity(2); assertNull(confirmEntity); //こっちは取れればOK BelongToEntity existEntity = belongToDao.getBelongToEntity(1); assertTrue(existEntity instanceof BelongToEntity); } public final void testGetAllEntityTx() { //初期データを読み込む setInitialData(); //全件取得 List belongToList = belongToDao.getAllEntity(); //答え合わせ assertEquals("リストのサイズが一致しません", 2, belongToList.size()); BelongToEntity answerEntity1 = (BelongToEntity) belongToList.get(0); assertEquals("値が一致しません", 1, answerEntity1.getBelongToCode()); assertEquals("値が一致しません", "地球連邦", answerEntity1.getBelongToName()); BelongToEntity answerEntity2 = (BelongToEntity) belongToList.get(1); assertEquals("値が一致しません", 2, answerEntity2.getBelongToCode()); assertEquals("値が一致しません", "ジオン公国", answerEntity2.getBelongToName()); } }
ただし、最後のテスト(testGetAllEntityTx())にはちょっとだけ問題が存在する。(と思う)
取得されたリストの順番が保証されていないのだ。
よってorder byで順番を固定するのが正しいと思われる。それについては次のトピックにしよう。