S2DaoTestCase
昨日作ったDaoのテストケースを書いてみようと思います。
- AccountDaoTest.java
S2DaoTestCaseを継承して作成します。
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);
}}
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を外すとデータは入りっぱなしでした。