Инициализация базы данных до 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.

  1. Используйте функцию инициализации JDBC Spring Boot, где вы поместите schema.sql или data.sql в data.sql src/test/resources, чтобы она была data.sql только во время тестирования.
  2. Использовать аннотацию Spring @Sql

Ответ 3

Вы можете использовать аннотацию @Sql для заполнения вашей БД, например ^

@Sql(scripts = "classpath:db/populateDB.sql")