Oracle-TimeStampをDbUnitでテストする
OracleでTimeStampを使うとこんなログがでる。
WARNING - USER.REGIST_DATE data type (1111, ‘TIMESTAMP(6)’) not recognized and will be ignored. See FAQ for more information.
また、テストデータにTimeStampの日付を追加すると、エラーになる。
org.dbunit.dataset.NoSuchColumnException: USER.REGIST_DATE
at org.dbunit.operation.AbstractOperation.getOperationMetaData(AbstractOperation.java:71)
at org.dbunit.operation.AbstractBatchOperation.execute(AbstractBatchOperation.java:129)
at org.dbunit.operation.CompositeOperation.execute(CompositeOperation.java:67)
at org.dbunit.DatabaseTestCase.executeOperation(DatabaseTestCase.java:87)
at org.dbunit.DatabaseTestCase.setUp(DatabaseTestCase.java:104)
at hoge.UserDaoTest.setUp(UserDaoTest.java:63)
at junit.framework.TestCase.runBare(TestCase.java:125)
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)
上記の対応にはOracleのTimeStamp用コードが必要になるようだ*1。
protected IDataSet getDataSet() throws Exception {
IDatabaseConnection con = new DatabaseConnection(session.connection());
//OracleのTimeStamp型用のコード
DatabaseConfig config = con.getConfig();
config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new OracleDataTypeFactory());
return con;
}