Инициализация базы данных до Spring Тест загрузки
Я использую JUnit для тестирования своего приложения, и все работает нормально, пока база данных была инициализирована до тестирования (используя gradle bootRun
для запуска в качестве веб-приложения). Однако, если база данных пуста, приложение не пытается инициализировать любые модели или объекты перед тестированием. Есть ли способ, которым я должен это делать? Я сделал предположение, что класс ApplicationRunner
будет запущен до теста и инициализирует сущности. Есть ли способ сделать это, или я использую неправильный подход?
Вот как выглядит мой файл application.properties
:
server.port=8090
server.ssl.key-store=classpath:keystore.jks
server.ssl.key-store-password=123456
server.ssl.key-password 123456
spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect
spring.jpa.hibernate.ddl-auto=create
spring.jpa.hibernate.naming-strategy:org.hibernate.cfg.ImprovedNamingStrategy
application.logger.org.springframework=INFO
Моя база данных хранится в /src/main/java/application/persistence/DbConfig.java
с помощью соединения DriverManagerDataSource
. И у меня есть установка ApplicationRunner
для запуска добавления нескольких строк в db при запуске.
изменить:
Я также должен добавить, что это аннотации, которые я использую в тестовом файле JUnit:
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(classes={
AdeyTrackApplication.class,
SecurityConfig.class,
WebConfig.class,
AuthorizationController.class
})
Ответы
Ответ 1
В приведенных выше ответах все используют метод загрузки схемы .sql, где мне нужно иметь схему .sql для тестов. Я не хотел делать это так, как моя схема будет расширяться, и я бы предпочел не обсуждать проблемы добавления записей в схему, поскольку мои тесты расширяются.
Когда я использую Spring Boot, я наткнулся на эту аннотацию, которая, кажется, решает проблему, сначала запустив bootRun
, а затем запустив тесты.
В моих тестовых аннотациях я заменил @ContextConfigurations
на @SpringApplicationConfiguration
и оставил все классы одинаковыми. Казалось, это решило проблему. Итак, теперь задача test
вызывает bootRun для загрузки классов и , а затем выполняет тесты.
См. @SpringApplicationConfiguration
Hop это помогает любому, кто сталкивается с той же проблемой.
Ответ 2
Существуют различные варианты, если вы не хотите выполнять это явно из @Before
JUnit.
- Используйте функцию инициализации JDBC Spring Boot, где вы поместите
schema.sql
или data.sql
в data.sql
src/test/resources
, чтобы она была data.sql
только во время тестирования. - Использовать аннотацию Spring @Sql
Ответ 3
Вы можете использовать аннотацию @Sql для заполнения вашей БД, например ^
@Sql(scripts = "classpath:db/populateDB.sql")