Подтвердить что ты не робот

Spring Загрузка тестирования с использованием памяти db

Я создал веб-проект Spring, используя Spring Boot. Хотелось бы понять практику тестирования. Мне нужна встроенная в память база данных, например hsql или h2 для моих юнитов с исходным schema.sql. И в основном приложении в базе данных можно было бы указать mysql или oracle

В проекте загрузки без Spring у нас обычно будет отдельный applicationcontext.xml, который передается веб-приложением, и для тестирования мы будем использовать applicationContext-text.xml

Теперь, в Spring загрузиться, поскольку все создается автоматически, а Spring тоже оценивается Boot. Хотелось бы узнать, как мне настроить наличие встроенного inmemory db для Junits и внешнего db, например MySQL для приложения.

Одним из решений, о котором я могу думать, является использование профилей. с 2 свойствами файла application.properties и application-test.properties. и используйте тестовый профиль для моих юнитов.

Любые рекомендации относительно подхода, который я должен принять.

4b9b3361

Ответ 1

Профиль - это действительно рекомендуемый подход. То, что я бы сделал, вероятно, делает реализацию in-memory "стандартным" профилем (это безобидно, в том смысле, что вы никогда не изменяете никаких реальных данных, поэтому лучше сделать это по умолчанию, если кто-то случайно запускает его против реальной базы данных). Лично я предпочитаю поместить всю внешнюю конфигурацию в один файл application.yml, но это действительно зависит от вас. Во внешней конфигурации вам необходимо указать допустимый класс и URL-адрес драйвера, например.

spring:
  datasource:
    driverClassName: org.h2.Driver
    url: jdbc:h2:mem:test;MODE=PostgreSQL
    schema: classpath:/schema.sql

---

spring:
  profiles: local
  datasource:
    url: jdbc:postgresql://localhost/test
    username: root
    password: changeme
    driverClassName: org.postgresql.Driver
    schema:

(Обратите внимание, что H2 имеет режим совместимости postgres, поэтому он действительно хорош как дополнение к постгресам в процессе производства.)