使ってみよう。・・・その2
前回うまくいったはずが、とんだオチが残っていた。
ここ*1を参考にしつつ、まずは継承元を変更。
extends DatabaseTestCase
そうすると継承していないメソッドがあるので、追加する。
/* (non-Javadoc)
* @see org.dbunit.DatabaseTestCase#getConnection()
*/
protected IDatabaseConnection getConnection() throws Exception {
return new DatabaseConnection(session.connection());
}/* (non-Javadoc)
* @see org.dbunit.DatabaseTestCase#getDataSet()
*/
protected IDataSet getDataSet() throws Exception {
return new FlatXmlDataSet(new File("src/test/conf/domain/prepareUser.xml"));
}
こやつらはsetUp()から自動的に呼ばれるようなので(たぶん)、setUp()に中に記述すると二重に実行される。
また、途中で追加したclose()処理は不要なようだ(というかExceptionになる)。
/*
* (non-Javadoc)
* @see junit.framework.TestCase#tearDown()
*/
protected void tearDown() throws Exception{
/*
if (tx != null) {
try {
tx.rollback();
} catch (Exception e) {
assertTrue(false);
}
}
if (session != null) {
try {
session.close();
} catch (Exception e) {
assertTrue(false);
}
}
*/
super.tearDown();
}
setUp()も次のように変更した
/*
* @see TestCase#setUp()
*/
protected void setUp() throws Exception {
//テスト対象クラスの作成
dao = (userDao) context.getBean("userDao");
//DB接続情報の取得
sf = dao.getSessionFactory();session = sf.openSession();
tx = session.beginTransaction();super.setUp();
}
テストデータ(prepareUser.xml)。
<?xml version='1.0' encoding='UTF-8'?> <dataset> <USER USER_ID="testUser" PASSWORD="userPass"/> </dataset>
これでテスト実行。
hoge.DataNotFoundException: そんな人いませんよん
at hoge.UserDaoImpl.getUser(UserDaoImpl.java:39)
at hoge.UserDaoTest.testGetUser(UserDaoTest.java:109)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:436)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:311)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
・・・自分で書いたExceptionのメッセージに腹を立てても仕方がない。落ち着け、自分。
先達たちのページを見直す。
むむ、setUp()の中でなにやら一行いらないぞ*2。
//tx = session.beginTransaction();
再実行。
・・・デケタ!!!
理由は・・・きっと手動でトランザクションを切り出すとautoCommitされないでrollback()されるんだよ、うん。
今日は(も)疲れたので深く考えないでおく。