S2Dao検証

昨日の独自データ型をS2Daoで使う試みが正しく動作するかを検証するために、S2Unitを使ってテストしてみます。

昨日のYMDateを流用した方が楽なので、日付とテキストが保存できる日記を作ってテストしてみよう。
まずテスト用にテーブルDiaryとDiaryクラスを用意します。(HSQLDB用)


CREATE TABLE Diary (
day DATE PRIMARY KEY,
text VARCHAR(100)
)

public class Diary {
private YMDate day;
private String text;

public YMDate getDay() {
return day;
}

public String getText() {
return text;
}

public void setDay(YMDate day) {
this.day = day;
}

public void setText(String text) {
this.text = text;
}
}

次に、DiaryDaoを作成します。SELECT、INSERTぐらいができればいいかな。

public interface DiaryDao {
Class BEAN = Diary.class;

String getDiary_ARGS = "day";
Diary getDiary(YMDate day);

int insert(Diary diary);
}

SQLも用意して、

DiaryDao_getDiary.sql

SELECT * FROM Diary WHERE day = /*day*/'2004-07-01'


DiaryDao_insert.sql

INSERT INTO Diary (day, text) VALUES (/*diary.day*/'2004-07-02', /*diary.text*/'今日は晴れ')

これで実装は完了ですね。やっぱり簡単でいいなぁ。

まずは、getDiary()のテスト。


public void testGetDiaryTx() throws Exception {
readXlsReplaceDb("testGetDiary.xls");

Date date = new SimpleDateFormat("yyyyMMdd").parse("20040702");
Diary diary = diaryDao.getDiary(new YMDate(date));

assertEquals(date.getTime(), diary.getDay().getTime());
assertEquals("今日も暑かった", diary.getText());
}
testGetDiary.xlsファイルは、シート名"Diary"にこのようなデータを入れておきます。

day, text
2004/07/02, 今日も暑かった
これで実行。
うまくいきました。パラメータがYMDateでも大丈夫ですね。

次は、insert()のテスト。


public void testInsertTx() throws Exception {
deleteTable("Diary");

Date date = new SimpleDateFormat("yyyyMMdd").parse("20040710");
Diary diary = new Diary();
diary.setDay(new YMDate(date));
diary.setText("早起きした");

int count = diaryDao.insert(diary);
assertEquals(1, count);

DataSet insertedData = new DataSetImpl();
insertedData.addTable(readDbByTable("Diary", "day = '2004-07-10'"));
DataSet expectedData = readXls("testInsert.xls");

assertEquals(expectedData, insertedData);
}

testInsert.xlsファイルは、シート名"Diary"にこのようなデータを入れておきます。

day, text
2004/07/10, 早起きした
そして実行。
うまくいきました。これならたぶんUPDATEも大丈夫でしょう。