Акведук и база данных памяти

просто хотел знать, поддерживает ли Aqueduct ORM простую базу данных в памяти для целей тестирования. Ищете что-нибудь легкое и легкое для написания бэкэнда, прежде чем подключать его к postgres.


person Christopher Armstrong    schedule 28.06.2018    source источник


Ответы (2)


Aqueduct был создан для тестирования с локально работающим экземпляром PostgreSQL. Это позволяет избежать класса ошибок, возникающих при использовании другого механизма базы данных в тестах и ​​развертывании. Это очень важная особенность Акведука.

Суть в том, что вы можете использовать локальный экземпляр PostgreSQL с той же эффективностью, что и база данных в памяти, и есть документация по единовременной настройке.

Детали

Aqueduct создает промежуточное представление вашей модели данных при запуске, отражая код вашего приложения. Это представление управляет миграциями базы данных, сериализацией, отражением во время выполнения и даже может быть экспортировано как JSON для создания инструментов моделирования данных поверх Aqueduct.

В начале каждого набора тестов ваша система тестирования использует это представление для создания временных таблиц в локальной базе данных с именем dart_test. Временные таблицы уничтожаются, как только разрывается соединение с базой данных; который вы можете настроить так, чтобы он происходил между тестами, группами тестов или целыми наборами тестов в зависимости от ваших потребностей. Оказывается, это очень быстро - порядка миллисекунд.

Обе платформы CI, такие как TravisCI и Appveyor, поддерживают локальные процессы PostgreSQL. См. этот сценарий и эта конфигурация travis.

person Joe Conway    schedule 28.06.2018

Я использовал аналогичный подход с H2 и Postgres с Java, но он довольно подвержен ошибкам: хотя интерфейс SQL может быть похож, вы можете использовать функцию, которая доступна в одном, но не в другом. В конце концов, ваша разработка либо заблокирована, либо все в порядке, но тогда при реальном развертывании будут возникать проблемы.

Я обнаружил, что запустить экземпляр Postgresql в докере намного проще, чем я думал вначале, и теперь я использую тот же принцип для большинства внешних зависимостей: запускать их внутри докера. Если есть интерес, я могу открыть исходный код пакета Dart, который запускает контейнер докеров и ждет, пока на выходе не появится определенный строковый шаблон (например, отчет об успешном запуске).

person István    schedule 28.06.2018