Die Initialisierung der Datenbank, bevor im Frühjahr Boot-test
Ich bin mit JUnit zum testen meiner Anwendung und alles funktioniert gut, solange die Datenbank initialisiert wurde, bevor die Tests (mit gradle bootRun
zu laufen als web-app). Allerdings, wenn die Datenbank leer ist, die Anwendung scheint nicht zu initialisieren, Modelle oder Einrichtungen vor der Prüfung. Gibt es eine Möglichkeit, die ich bin, dies zu tun? Ich machte eine Annahme, dass die ApplicationRunner
Klasse lief, bevor Sie den test und initalise der Entitäten. Gibt es eine Möglichkeit, dies zu tun, oder bin ich mit dem falschen Ansatz?
Dies ist, wie mein application.properties
Datei sucht, wie:
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
Meiner Datenbank gespeichert ist, in /src/main/java/application/persistence/DbConfig.java
mit einem DriverManagerDataSource
Verbindung. Und ich habe setup ApplicationRunner
ausführen, fügen Sie ein paar Zeilen an die db beim Start.
edit:
Ich sollte auch hinzufügen, dass diese sind die Anmerkungen ich bin auf dem JUnit-test-Datei:
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(classes={
AdeyTrackApplication.class,
SecurityConfig.class,
WebConfig.class,
AuthorizationController.class
})
- Erste Möglichkeit ist die initialize database in
setUp
Methode in der Testklasse. Eine weitere Möglichkeit ist das erstellen von test-Konfiguration, wo Sie hinzufügen@PostConstruct
Funktion initialisieren Daten in der Datenbank und fügen Sie diese KlasseContextConfiguration
. - gibt es ein Beispiel für eine Implementierung dieser? Ich bin nicht sehr erfahren mit dem Frühling, und ich noch nicht in dieser annotation in Bezug auf JUnit.
- Der einfachste Weg ist, injizieren JdbcTemplate in Ihre test-Klasse. Als Nächstes können Sie ausführen der sql-Abfrage mit
jdbcTemplate.execue(sql)
. Zum ausführen dieses Codes vor jedem test sollten SiesetUp
Methode mit der annotation@Before
. Hier ist Beispiel wie zu injizieren JdbcTemplate und execute query: github.com/spring-projects/spring-boot/blob/master/... und hier ist ein Beispiel für die Verwendung@Before
junit.sourceforge.net/javadoc/org/junit/Before.html
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es verschiedene Optionen, wenn Sie nicht ausführen wollen, die explizit von
@Before
JUnit Haken.schema.sql
oderdata.sql
insrc/test/resources
Ordner, so dass es abgeholt werden nur während der Prüfung.Den oben genannten Antworten, die alle verwenden .sql-schema laden-Technik, wo müsste ich haben .sql-schema für tests. Ich wollte nicht, dass es so zu tun, als mein schema würde den ausbau und die möchte ich lieber nicht gehen durch den Aufwand für die Einträge hinzufügen, um das schema, wie meine tests erweitern.
So, ich bin mit Spring Boot, stieß ich auf diese Anmerkung, die scheint das Problem zu lösen, indem Sie zuerst ausgeführt
bootRun
und dann die tests durchgeführt werden.In meinem test Anmerkungen ersetzt habe ich die
@ContextConfigurations
mit@SpringApplicationConfiguration
und Links alle Klassen gleich sein. Dies schien das Problem zu lösen. So, jetzt dietest
Aufgabe ruft bootRun zum laden der Klassen und dann führt die tests.Sehen @SpringApplicationConfiguration
Hop dies hilft jemand vor dem gleichen Problem.
Können Sie die Verwendung von @Sql annotaion für füllen Sie Ihre DB, zum Beispiel^