Essenz:
Wie kann ich auto-rollback meine Ruhezustandstransaktion in einem JUnit-Test ausführen, der mit JBehave ausgeführt wird?
Das Problem scheint zu sein, dass JBehave das SpringAnnotatedEmbedderRunner
möchte, aber einen Test mit Anmerkungen versehen soll, da @Transactional
das SpringJUnit4ClassRunner
benötigt.
Ich habe versucht, eine Dokumentation darüber zu finden, wie man Rollback mit SpringAnnotatedEmbedderRunner
implementiert oder JBehave mit SpringJUnit4ClassRunner
arbeiten lässt, aber ich konnte nicht arbeiten.
Hat jemand ein (vorzugsweise einfaches) Setup, das JBehave-Stories mit Spring und Hibernate und automatischem Rollback der Transaktionen ausführt?
Weitere Infos zu meinem bisherigen Setup:
JBehave mit Spring arbeiten - aber nicht mit automatischem Rollback:
%Vor% In meinen Testschritten kann ich @Inject
alles schön:
(Ja, die databaseSetupHelper-Methoden sind alle transaktional)
PersonProvider ist im Grunde genommen ein Wrapper um org.springframework.data.jpa.repository.support.SimpleJpaRepository
. Es gibt also Zugriff auf den EntityManager, aber die Kontrolle über die Transaktionen (mit Start / Rollback) hat nicht funktioniert, ich denke, wegen all der @Transactional
s, die unter der Haube in dieser Hilfsklasse ausgeführt werden.
Auch ich lese, dass JBehave in einem anderen Kontext läuft? Sitzung? etwas? was zu einem Verlust der Kontrolle über die durch den Test gestartete Transaktion führt? Ziemlich verwirrende Sachen ..
bearbeiten:
Bearbeite das Obige, indem du den Beitrag umformest, um mein aktuelles Wissen wiederzugeben und die ganze Sache zu verkürzen, so dass die Frage offensichtlicher und das Setup weniger aufdringlich wird.
Ich denke, Sie können den SpringAnnotatedEmbedderRunner überspringen und JBehave die notwendige Konfiguration zur Verfügung stellen. Zum Beispiel statt
%Vor%Sie können
tun %Vor%Außerdem: Warum möchten Sie die Transaktion zurücksetzen? Normalerweise verwenden Sie JBehave für Akzeptanztests, die in einer produktionsähnlichen Umgebung ausgeführt werden. Zum Beispiel müssen Sie zunächst einige Daten in der Datenbank einrichten, über Browser / Selenium darauf zugreifen und nach den Ergebnissen suchen. Damit dies funktioniert, muss die DB-Transaktion festgeschrieben werden. Müssen Sie nach den Tests manuell bereinigen, was Sie in Annotated-Methoden @AfterStories oder @AfterScenario tun können.