Używam JUnit do przetestowania mojej aplikacji i wszystko działa poprawnie, dopóki baza danych została zainicjowana przed testowaniem (przy użyciu gradle bootRun
do uruchomienia jako aplikacja internetowa). Jeśli jednak baza danych jest pusta, aplikacja nie wydaje się inicjować żadnych modeli ani jednostek przed testowaniem. Czy jest sposób, w jaki powinienem to zrobić? Założyłem, że klasa ApplicationRunner
zostanie uruchomiona przed testem i zainicjalizuje elementy. Czy istnieje sposób, aby to zrobić, czy też używam niewłaściwego podejścia?Inicjowanie bazy danych przed testem Spring Boot
To jest jak mój plik application.properties
patrzy jak:
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
są przechowywane w bazie Moja /src/main/java/application/persistence/DbConfig.java
użyciu DriverManagerDataSource
połączenia. I mam ustawienie ApplicationRunner
, aby uruchomić dodać kilka wierszy do bazy danych po uruchomieniu.
edit:
Należy również dodać, że są to adnotacje używam na pliku testowego JUnit:
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(classes={
AdeyTrackApplication.class,
SecurityConfig.class,
WebConfig.class,
AuthorizationController.class
})
Pierwszym sposobem jest zainicjowanie bazy danych w metodzie "setUp" w klasie testowej. Innym sposobem jest utworzenie konfiguracji testowej, w której dodaje się funkcję '@ PostConstruct', która inicjuje dane w bazie danych i dodaje tę klasę do' ContextConfiguration'. – krynio
@krynio jest przykładem implementacji tego? Nie jestem bardzo doświadczony w Spring i nie natknąłem się na tę adnotację w odniesieniu do JUnit. – px06
Najprostszy sposób to wstrzyknąć JdbcTemplate do swojej klasy testowej. Następnie możesz wykonać kwerendę sql przy użyciu 'jdbcTemplate.execue (sql)'. Aby uruchomić ten kod przed każdym testem, powinieneś stworzyć metodę 'setUp' z adnotacją' @ Before'. Oto przykład jak wstrzyknąć JdbcTemplate i wykonać zapytanie: https://github.com/spring-projects/spring-boot/blob/master/spring-boot-samples/spring-boot-sample-flyway/src/test/java /sample/flyway/SampleFlywayApplicationTests.java i tutaj jest przykładem użycia '@ Before' http: // junit.sourceforge.net/javadoc/org/junit/Before.html – krynio