Как тестировать сценарии SQL являются стандартными SQL в тестах Junit? - PullRequest
4 голосов
/ 25 августа 2010

Есть ли способ проверить, что сценарии SQL содержат стандартный SQL с помощью тестов java / junit?

В настоящее время у нас есть сценарии sql для создания базы данных и т. Д. В базе данных Postgres, но при использовании hsqldb все заканчивается неудачей.Вот почему я задаюсь вопросом, существуют ли какие-либо инструменты Java для тестирования, являются ли операторы sql стандартными sql.

Или было бы разумно создавать разные наборы сценариев для каждого поставщика базы данных?Если да, есть ли способ проверить, работает ли данный скрипт с postgres / hsqldb?

Ответы [ 6 ]

1 голос
/ 25 августа 2010

База данных H2 поддерживает различные режимы , которые могут помочь вам в тестировании postgres. Я обнаружил, что наш sql часто содержит функции, которые не поддерживаются, но H2, но вы можете создавать свои собственные "хранимые процедуры msgstr "которые фактически вызывают статический метод Java, чтобы обойти это. Если вы хотите поддерживать разных поставщиков баз данных, вам следует пойти по маршруту конкретного сценария, если вы не выполняете базовые запросы.

Если у вас есть доступные ресурсы, я бы порекомендовал настроить полноценную среду UAT, которую вы можете использовать для тестирования с действующей базой данных postgres, поскольку даже незначительные различия в конфигурации БД могут неожиданно повлиять на планы запросов.

0 голосов
/ 20 июня 2014

ZQL отлично работает с Junit ..

ZqlParser parser = new ZqlParser(any input stream);
try{
 parser = parser.readStatement();
}catch(ParseException e){
// if sql is not valid it caught here
}
0 голосов
/ 25 августа 2010

Лучший инструмент для проверки операторов SQL на соответствие стандарту SQL - это HSQLDB 2.0.Это особенно верно для операторов определения данных.HSQLDB был написан для Стандарта, в отличие от принятия битов Стандарта в нескольких версиях.

PostgresSQL медленно движется к стандартному SQL.Но у него все еще есть некоторые «устаревшие» типы данных.HSQLDB позволяет вам определять типы с помощью оператора CREATE TYPE для совместимости с другими диалектами.Это также позволяет вам определять функции в SQL или Java для той же цели.

Лучшая политика - максимально использовать стандартный SQL с пользовательскими типами и функциями для поддержки синтаксиса альтернативной базы данных.

0 голосов
/ 25 августа 2010

Различные поставщики предоставляют различные дополнительные функции в своей реализации SQL.

Вы можете выбрать набор баз данных для тестирования. Затем используйте http://dbunit.sourceforge.net, чтобы упростить тестирование.

0 голосов
/ 25 августа 2010

Похоже, вы ищете синтаксический анализатор SQL и валидатор. Единственный Java SQL-парсер, с которым я знаком, это Zql, но я никогда не использовал его.

Аналогичный вопрос был задан в начале прошлого года, и лучшим ответом оказалось написание собственного парсера с ANTLR .

0 голосов
/ 25 августа 2010

Я обычно делал очень простую java-оболочку, которая тестирует этот код, используя localhost-соединение с некоторыми стандартными настройками user / pass.

Не забудьте использовать временную базу данных или известную базу данных test.так что ваши тесты не разрушают ничего важного.

Причина вышеизложенного заключается в том, что у меня возникла потребность в конкретных базах данных (нестандартные функции и т. Д.).

Если вы хотите протестировать стандартный sql-материал для тестов junit (например, синтаксис, выбираетсяи т. д.), я бы рассмотрел использование встроенной базы данных SQL в Java (обычно только память).Таким образом, можно легко протестировать множество вещей без необходимости установки БД, а также без риска уничтожения других установок.

...