Юнит тесты Postgres
От: telek1024  
Дата: 11.12.14 10:05
Оценка:
Добрый день.

В нашем проекте целевая БД PostreSQL. Бизнес логика пишется на Java, но в DAO пишется много SQL. Возникает задача юнит тестирования. Причём как уровня сервисов (нужны моки БД), так и уровня DAO.

Сейчас сделано так: юнит тесты разворачивают в памяти БД и запускают на ней честные (без моков) сервисы и DAO. В большинстве случаев всё проходит хорошо, но иногда возникают проблемы. Например мне так и не удалось найти 100% синтаксически совместимую с Postgres БД.

HSQL отвергли сразу, так как не смотря на заявления разработчиков она не понимает всех alias для типов данных. Это критично так как DDL генерируется специальными инструментами.

H2 тоже не устраивает тем, что поведение bigserial типов отличается от оригинального Postgres (на лету не создаются sequence). Кроме того, в H2 очень скромные возможности хранимых процедур по сравнению с Postgres. Например не получилось сделать SELECT из хранимки, которая возвращает ResultSet. H2 просто не понимает что он неё хотят.

Вопрос такой. Сталкивался ли кто-нибудь с подобными проблемами и как это можно решить?
Re: Юнит тесты Postgres
От: vsb Казахстан  
Дата: 11.12.14 10:13
Оценка:
В чём проблема использовать, собственно, постгрес для тестирования? Пусть разработчик установит постгрес себе, создаст базу, пользователя и вперёд. Можно эти тесты сделать опциональными, чтобы не запускать каждый раз. Постгрес это не какой-нибудь, прости господи, оракл, который без бутылки не поставишь, там вроде всё просто. Можно даже Docker использовать, чтобы совсем просто было, сейчас это модно.
Отредактировано 11.12.2014 10:15 vsb . Предыдущая версия .
Re: Юнит тесты Postgres
От: hrensgory Россия  
Дата: 11.12.14 10:13
Оценка: +1
On 11.12.2014 13:05, telek1024 wrote:

> В нашем проекте целевая БД PostreSQL. Бизнес логика пишется на Java, но

> в DAO пишется много SQL. Возникает задача юнит тестирования. Причём как
> уровня сервисов (нужны моки БД), так и уровня DAO.
> Сейчас сделано так: юнит тесты разворачивают в памяти БД и запускают на
> ней честные (без моков) сервисы и DAO. В большинстве случаев всё
> проходит хорошо, но иногда возникают проблемы. Например мне так и не
> удалось найти 100% синтаксически совместимую с Postgres БД.

А почему не запускаете тесты на самом PostgreSQL?

Типа такого:
create database
...
drop database

--
WBR,
Serge.
Posted via RSDN NNTP Server 2.1 beta
Re: Юнит тесты Postgres
От: andyag  
Дата: 11.12.14 10:19
Оценка:
Здравствуйте, telek1024, Вы писали:

T>Вопрос такой. Сталкивался ли кто-нибудь с подобными проблемами и как это можно решить?


Ды легко. Берёте https://www.docker.com/, делаете образ какой-нибудь убунты с постгресом, перед тестами поднимаете, после тестов выключаете. Любые проблемы конфигурационного характера исключены если все девелоперы используют один и тот же образ. Для каждого прогона контейнер будет чистым если намеренно не сохранять. Поднимается оно всё за десятки минут.
Re: Юнит тесты Postgres
От: Nicht Россия  
Дата: 11.12.14 10:22
Оценка:
Здравствуйте, telek1024, Вы писали:

T>Добрый день.


T>В нашем проекте целевая БД PostreSQL. Бизнес логика пишется на Java, но в DAO пишется много SQL. Возникает задача юнит тестирования. Причём как уровня сервисов (нужны моки БД), так и уровня DAO.


T>Сейчас сделано так: юнит тесты разворачивают в памяти БД и запускают на ней честные (без моков) сервисы и DAO. В большинстве случаев всё проходит хорошо, но иногда возникают проблемы. Например мне так и не удалось найти 100% синтаксически совместимую с Postgres БД.


T>HSQL отвергли сразу, так как не смотря на заявления разработчиков она не понимает всех alias для типов данных. Это критично так как DDL генерируется специальными инструментами.


T>H2 тоже не устраивает тем, что поведение bigserial типов отличается от оригинального Postgres (на лету не создаются sequence). Кроме того, в H2 очень скромные возможности хранимых процедур по сравнению с Postgres. Например не получилось сделать SELECT из хранимки, которая возвращает ResultSet. H2 просто не понимает что он неё хотят.


T>Вопрос такой. Сталкивался ли кто-нибудь с подобными проблемами и как это можно решить?


Можно попробовать запускать настоящий постгрес в docker. Для докера написано несколько клиентов на джава, так что несложно будет поднимать контейнер при старте теста.
Re[2]: Юнит тесты Postgres
От: . Великобритания  
Дата: 12.12.14 21:19
Оценка:
Здравствуйте, hrensgory, Вы писали:

h> А почему не запускаете тесты на самом PostgreSQL?

+1
Стоит уточнить, что это должны быть тесты только для слоя DAO, сервисы тестить обычными юнит-тестами мокая DAO.

h> Типа такого:

h> create database
h> ...
h> drop database
Можно взять ещё например liquibase для удобства.
avalon/1.0.432
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.