Ich habe Integrationstests, die oben in der inmemory Datenbank ausgeführt werden. Die Signatur jedes Tests sieht mehr oder weniger so aus:
%Vor%Während der Initialisierung des Testkontexts wird das DB-Schema von Hibernate neu erstellt:
%Vor% Ich erwarte, dass das sql-Skript nach der Initialisierung des Kontexts und nach der Generierung des db-Schemas ausgeführt wird. Allerdings wird in einigen Fällen clean-data-in-all-tables.sql
vor der Schemageneration ausgeführt und schlägt fehl, weil Tabellen erwartet werden, die noch nicht erstellt wurden.
Ich habe mehr als 500 Tests geschrieben, so wie ich es erklärt habe und sie haben alle gut funktioniert, bis ich einige weitere ähnliche Tests hinzugefügt habe.
Tests schlagen fehl, wenn ich sie zusammen über Gradle oder IntelliJ ausfühle. Beachten Sie, dass die fehlgeschlagenen Tests nicht die Tests sind, die kürzlich hinzugefügt wurden. Dies sind die alten Tests, die völlig unabhängig von denen sind, die ich hinzugefügt habe. Es ist auch seltsam, dass die fehlgeschlagenen Tests gut funktionieren, wenn ich sie nacheinander über IntelliJ ausführen lasse.
Es sieht aus wie ein Bug von Spring-Boot, aber ich versuche immer noch einen Weg zu finden, um es zu umgehen. Zur gleichen Zeit habe ich viele Dinge versucht, um das Problem zu lösen, aber keiner von ihnen war hilfreich.
Bitte teilen Sie Ihre Ideen mit, was helfen könnte und was mit meinem Code falsch sein könnte.
UPDATE:
Die Problemumgehung gefunden: Durch Ändern von spring.jpa.hibernate.ddl-auto
von create-drop
in create
wird das Problem behoben.
Aber die Frage ist noch offen Was ist der Grund für solch seltsames Verhalten?
Eine mögliche Lösung (ich bin mir nicht sicher, ob Sie offen für die Verwendung von DBUnit sind) kann sein:
1) Erstellen Sie einen abstrakten Repository-Integrationstest:
%Vor%2) Erstellen Sie einen "echten" Integrationstest:
%Vor%In der Datei Dataset.xml können Sie den Anfangszustand für Ihre Tests usw. einrichten ... Mehr finden Sie hier
Tags und Links java spring-boot junit spring-boot-test