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;
 }