Я использую JUnit для тестирования моего приложения, и все работает нормально, пока база данных была инициализирована до тестирования (с использованием gradle bootRun
для запуска в качестве веб-приложения). Однако, если база данных пуста, приложение не пытается инициализировать любые модели или объекты перед тестированием. Есть ли способ, которым я должен это делать? Я сделал предположение, что класс ApplicationRunner
будет запущен перед тестированием и инициализировать объекты. Есть ли способ сделать это, или я использую неправильный подход?Инициализация базы данных до теста Spring Boot
Это как мой 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
})
Первый способ инициализации базы данных в методе 'setUp' в вашем тестовом классе. Другим способом является создание тестовой конфигурации, в которую вы добавляете функцию '@ PostConstruct', которая инициализирует данные в базе данных и добавляет этот класс в' ContextConfiguration'. – krynio
@krynio есть пример реализации этого? Я не очень опытен с весной, и я не встречал эту аннотацию в отношении JUnit. – px06
Самый простой способ - ввести JdbcTemplate в ваш тестовый класс. Затем вы можете выполнить SQL-запрос с помощью 'jdbcTemplate.execue (sql)'. Чтобы запустить этот код перед каждым тестом, вы должны создать метод 'setUp' с аннотацией' @ Before'. Вот пример того, как вводить JdbcTemplate и выполнять запрос: https://github.com/spring-projects/spring-boot/blob/master/spring-boot-samples/spring-boot-sample-flyway/src/test/java /sample/flyway/SampleFlywayApplicationTests.java и вот пример использования '@ Before' http: // junit.sourceforge.net/javadoc/org/junit/Before.html – krynio