Я пытаюсь данные для тестирования DB блока установки путем заполнения таблицы, которая имеет столбцы типа TIMESTAMP(6) WITH TIME ZONE
следующим образом:Как населён TIMESTAMP Oracle с полем ZONE с использованием DBUnit FlatXmlDataSet
<timetable START_TIME="2015-03-01 10.00.00.000000000" END_TIME="2015-03-02 10.00.00.000000000"/>
Но я получаю следующее исключение при запуске теста:
org.dbunit.dataset.NoSuchColumnException: TIMETABLE.START_TIME - (Non-uppercase input column: START_TIME) in ColumnNameToIndexes cache map. Note that the map's column names are NOT case sensitive.
at org.dbunit.dataset.AbstractTableMetaData.getColumnIndex(AbstractTableMetaData.java:117)
at org.dbunit.operation.AbstractOperation.getOperationMetaData(AbstractOperation.java:89)
at org.dbunit.operation.AbstractBatchOperation.execute(AbstractBatchOperation.java:143)
at org.dbunit.operation.CompositeOperation.execute(CompositeOperation.java:79)
at com.github.springtestdbunit.DbUnitRunner.setupOrTeardown(DbUnitRunner.java:194)
at com.github.springtestdbunit.DbUnitRunner.beforeTestMethod(DbUnitRunner.java:66)
at com.github.springtestdbunit.DbUnitTestExecutionListener.beforeTestMethod(DbUnitTestExecutionListener.java:185)
at org.springframework.test.context.TestContextManager.beforeTestMethod(TestContextManager.java:249)
Я пробовал различные форматы для поля временных меток, включая добавления часового пояса суффиксом + XX: XX 2015-03-01 10.00.00.000000000 +00.00
не увенчались успехом. Я также попытался запустить тест с аргументом VM -Duser.timezone=UTC
, но это тоже не помогло.
Кто-нибудь знает, как это можно достичь?
EDIT 1
я заметил следующие предупреждения в консоли:
2016-05-31 14:54:23 WARN SQLHelper:429 - TIMETABLE.START_TIME data type (-101, 'TIMESTAMP(6) WITH TIME ZONE') not recognized and will be ignored. See FAQ for more information.
2016-05-31 14:54:23 WARN SQLHelper:429 - TIMETABLE.END_TIME data type (-101, 'TIMESTAMP(6) WITH TIME ZONE') not recognized and will be ignored. See FAQ for more information.
Так выглядит DBUnit не поддерживает TIMESTAMP WITH TIME ZONE
тип данных и игнорирует его, отсюда NoSuchColumnException
исключение
EDIT 2
Фактически dbunit уже поддерживает типы данных TIMESTAMP
через класс OracleDataTypeFactory
. Конфигурация будет выглядеть:
<bean id="oracleDataTypeFactory" class="org.dbunit.ext.oracle.OracleDataTypeFactory"/>
<bean id="dbUnitDatabaseConfig" class="com.github.springtestdbunit.bean.DatabaseConfigBean">
<property name="datatypeFactory" ref="oracleDataTypeFactory" />
</bean>
К сожалению, после того, как эти изменения конфигурации проблема типа данных все еще там, потому что DbUnit DatabaseConfig.datatypeFactory собственность была вновь отброшена на DbUnitTestExecutionListener по умолчанию DefaultDataTypeFactory
, который не поддерживает TIMESTAMP типы данных