2014-12-21 1 views
2

Я пишу простой REST API, используя spray, и как часть этого, я хотел бы иметь возможность настроить базу данных с макетными данными, а затем развернуть сервер REST с помощью этой тестовой базы данных.Как запустить сервер как часть теста?

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

ответ

1

Разница между тестами и производственным кодом с точки зрения sbt - это в основном местоположение кода. Это обусловлено the configuration scope facility in sbt:

Конфигурация определяет вкус сборки, потенциально со своими собственными классами, источниками, генерируемыми пакетами и т.д. Концепция конфигурации исходит из плюща, который SBT использует для управляемых зависимостей зависимостей библиотеки, и из MavenScopes.

Что вы можете сделать в Compile рамки должны быть легко применимы к Test и наоборот. Это может быть или не так просто, как кажется, но на этом пути должно быть не так много обручей.

As I pointed out in a comment, если сделаете sbt run это как если бы вы сделали sbt compile:run ... хорошо, почти, но можете предположить, но. Настройте тестовый экземпляр вашей базы данных и сервера и выполните их все с помощью sbt test:run или даже лучше - напишите тест, возможно, интеграционный тест, который будет делать все, что необходимо в рамках его запуска, и дать ему прогон с sbt it:test - см. Integration Tests.

1

Вы можете добавить объект в/src/test. Этот объект будет загружать ваш сервер так же, как обычно, за исключением того, что вы используете базу данных mock.

Если вы не идентифицируете этот объект как тестовый класс, он не будет мешать вашему набору тестов. Это зависит от используемой тестовой системы.

Например, в Spec2 он автоматически запускает любой тестовый класс, расширяющий спецификацию. Если вы не расширите этот класс, он не будет запущен.

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

+0

Я пробовал что-то вроде этого: «объект TestSperver расширяет приложение», но когда я пробовал «sbt run», он не отображался как один из классов, которые я мог выполнить. Что мне нужно сделать, чтобы запустить его? См. Https://github.com/ririw/circusoc-backend/blob/master/src/test/scala/com/circusoc/TestTest.scala – riri

+0

Вам необходимо выполнить 'sbt test: run'. –