S2DaoTestCase

昨日作ったDaoのテストケースを書いてみようと思います。

  • AccountDaoTest.java


package test.org.seasar.application.gusuku.dao;

import java.util.List;

import org.seasar.application.gusuku.dao.AccountDao;
import org.seasar.dao.unit.S2DaoTestCase;
import org.seasar.extension.dataset.DataSet;

/**
* @author duran
*
*/
public class AccountDaoTest extends S2DaoTestCase {

private final static String PATH = "org/seasar/application/gusuku/dao/AccountDao.dicon";

//自動セットされます
private AccountDao dao;

//コンストラクタ
public AccountDaoTest(String args) {
super(args);
}
//S2Containerに対するinclude()メソッド
public void setUp() {
include(PATH);
}

public void testFindAll() {
DataSet expected = readXls("AccountDao.xls");
List result = dao.findAll();
assertEquals("データが一致しません",expected,result);
}

}

S2DaoTestCaseを継承して作成します。
static or final でないフィールドでS2Containerに存在するコンポーネントがあれば自動でセットされるようです。

  • AccountDao.xls

予想されるデータを書いておきました。

ACCOUNTID,USERID,PASSWORD,NAME,EMAIL
RDATEとUDATEはテスト対象から外しました。

    • 二行目以降にデータ。
    • シートの名前にテーブル名(ACCOUNT)。

必要のないシートは削除しておかないとエラーになりました。


このままEclipseから
Run>JUnit Test
でバッチリいけました。
データを変更してみたら赤バーになりました。


※今回のExcelデータはOpenOfficeで作りました。

テストメソッドにtextXXXXXTxと「Tx」をつけると勝手にロールバックを行うようなのでやってみました。


public void testInsertTx(){
Account account = new Account();
account.setUserid("userid");
account.setPassword("password");
account.setName("duran");
account.setEmail("duran@hoge.org");
dao.insert(account);
}
実行後にテーブルを見てみるとデータは入っていませんでした。
当然ですがTxを外すとデータは入りっぱなしでした。


AOPを使ったトランザクションは次回にまわしまーす。