Kombinieren von JBehave mit SpringJUnit4ClassRunner, um das Rollback von Transaktionen zu aktivieren

9

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:

%Vor%

(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.

    
Pete 14.05.2012, 13:53
quelle

3 Antworten

2

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.

    
AndreasEK 22.06.2012, 08:36
quelle
1

Ich habe es geschafft, indem ich den Transaktionsumfang manuell kontrollierte und ihn nach jedem Szenario zurücklegte. Befolgen Sie einfach die offizielle Anleitung zur Verwendung von Spring mit JBehave und führen Sie dann den folgenden Trick aus.

%Vor%     
ievgen 09.07.2014 21:34
quelle
1

Ich bin mit JBehave nicht vertraut, aber anscheinend suchen Sie nach dieser Annotation.

%Vor%

Sie könnten defaultRollback in Ihrem testContext auch auf true setzen.

    
arcdrag 14.05.2012 14:18
quelle

Tags und Links