My Frühlings-Boot-Mvc-Webanwendung hat die folgende Datenbankkonfiguration in application.properties
Datei:Wie neu Datenbank vor jedem Test im Frühjahr erstellen?
spring.datasource.url=jdbc:h2:tcp://localhost/~/pdk
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=org.h2.Driver
dies die einzige config habe ich. Keine anderen Konfigurationen von mir irgendwo gemacht. Nichtsdestotrotz erstellen die Spring- und Subsysteme automatisch eine Datenbank bei jedem Webanwendungslauf neu. Die Datenbank wird neu erstellt, nämlich auf dem Systemlauf, während sie Daten enthält, nachdem die Anwendung beendet wurde.
Ich habe diese Standardwerte nicht verstanden und erwartet, dass dies für Tests geeignet ist.
Aber als ich anfing, Tests auszuführen, fand ich, dass Datenbank nur einmal neu erstellt wird. Da Tests in keiner vordefinierten Reihenfolge ausgeführt werden, ist dies überhaupt sinnlos.
So ist die Frage: , wie man irgendeinen Sinn macht? I.e. Wie man die Datenbank vor jedem Test neu erstellen lässt, wie es beim ersten Start der Anwendung passiert?
Mein Test-Klasse-Header folgt:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = myapp.class)
//@WebAppConfiguration
@WebIntegrationTest
@DirtiesContext
public class WebControllersTest {
Wie Sie sehen, habe ich versucht @DirtiesContext
auf Klassenebene und es hat nicht geholfen.
UPDATE
Ich habe eine Bohne
@Service
public class DatabaseService implements InitializingBean {
, die ein Verfahren
@Override
@Transactional()
public void afterPropertiesSet() throws Exception {
log.info("Bootstrapping data...");
User user = createRootUser();
if(populateDemo) {
populateDemos();
}
log.info("...Bootstrapping completed");
}
Jetzt ist es mir gemacht populateDemos()
Methode zum Löschen aller Daten aus der Datenbank hat. Leider ruft es trotz @DirtiesContext
nicht vor jedem Test an. Warum?
Dies ist benutzerdefinierte Logik. Spring weiß nichts über Ihre Datenbank (en). Schreibe ein '@ Before' und' @ After' zum Einrichten und Aufräumen. –
@StiriosDelimanolis Ich weiß, es ist kurz, aber sollte dein Kommentar keine Antwort sein? –
@JimGarrison Eh, Community-Wiki. –