2016-12-29 2 views
2

Я пишу интеграционное тестирование, и я хочу протестировать свои SQL-запросы с помощью базы данных H2. В производстве эти запросы работают с базой данных Oracle.Сделать функцию Oracle last_day совместимой с базой H2

Я должен выполнить этот запрос

меня пытается использовать режим совместимости

SELECT last_day(MY_CURRENT_DATE) from MY_TIME 

, используя режим совместимости оракул jdbc:h2:mem:default;MODE=Oracle;DB_CLOSE_DELAY=-1 но я получаю эту ошибку:

org.h2.jdbc.JdbcSQLException: Function "LAST_DAY" not found; SQL statement: 
SELECT last_day(MY_CURRENT_DATE) from MY_TIME [90022-176] 

It просто кажется, что режим совместимости не распространяется на специфические для вендора функции.

У меня есть идея, как решить эту проблему при тестировании. Просто переопределить last_day функцию Oracle с H2 определенной пользователем функции:

DROP ALIAS IF EXISTS last_day; 

CREATE ALIAS last_day AS $$ 
String last_day(java.sql.Connection con, Date date) throws Exception { 
     //get the last day of month 
    } 
} 
$$; 

Но мне интересно, если это лучшая идея? Есть ли способ переписать функцию Oracle LAST_DAY (которая вычисляет последний день месяца) таким образом, который совместим со всеми другими базами данных (включая H2)?

+1

Еще один хороший пример того, почему использование другой СУБД для тестирования тогда в производстве - это не очень хорошая идея. –

+0

Я бы использовал базу данных в памяти, а не ту, которую я использую в производстве. Это потому, что я хочу, чтобы мои интеграционные тесты работали быстро. – Alex

+0

Fast не покупает вам ничего, если тест бессмыслен –

ответ

0

Для меня ясно, что для приемочных/системных тестов вы должны использовать базу данных, очень похожую на базу данных в производстве.

Для интеграции и модульного тестирования вы можете полностью издеваться над компонентом сервера базы данных.

Смежные вопросы