Wir haben JUnit4 in unserer Anwendung implementiert, die den Spring-Kern & JPA mit DB2 verwendet. Wir müssen eine vollständige Funktionalität testen, die Daten aus einer Datenbank abruft und in eine andere Datenbank zusammenführt.Junit-Testfall Transaktion wird nicht ausgeführt - keine Fehler
Testfall für das Abrufen der Daten aus der 1. Datenbank geschrieben und es läuft ohne Fehler einwandfrei, aber die Datensätze werden nicht in der 2. Datenbank gespeichert.
Implementierung
Die Klasse Testcase wir die folgenden Anmerkungen enthalten sind, den Testfall im Rahmen einer Transaktion, falls erforderlich, führen zu machen
@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners({
DependencyInjectionTestExecutionListener.class,
TransactionalTestExecutionListener.class})
@ContextConfiguration(locations={""})
@TransactionConfiguration(transactionManager="defaultTransactionManager", defaultRollback=false)
@Transactional
Bei der Anwendung wir eine Manager-Klasse haben diese auszuführen Operation mit der Methode doSynch(). Von dieser Methode wird die txStore() -Methode der crudHelper-Klasse aufgerufen, um die doStore() -Methode (in derselben Klasse) zu initialisieren und aufzurufen, um die Entität mit der Datenbank zu verbinden.
Im folgenden werden die Transaktions deklarativen durch aus diesem Testfall Logik
TestCase testSynch() - @Transactional(propagation=Propagation.SUPPORTS)
Manager doSynch() - @Transactional(propagation=Propagation.NEVER)
CRUDHelper txStore() - @Transactional(propagation=Propagation.REQUIRED)
doStore() - No Transactional annotation
doSynch() als wie nie markiert ist es an diesem Punkt keine Transaktion benötigt und in weiteren Stufen, wie beispielsweise in CRUDHelper die Transaktion kann als ERFORDERLICH markiert werden, um sicherzustellen, dass eine Transaktion verfügbar ist.
Problem
hier, wenn wir den Testfall ausgeführt werden, die der Manager-doSynch() Methode, um die Funktionalität zu testen nennt, komplett Fluss arbeitet außer perfekt, dass Datensätze nicht zusammengeführt werden und keine Fehler geworfen werden.
Die Manager-Methode, wenn sie von einer JSP aufgerufen wird, funktioniert sehr gut. Auch getestet haben wir, indem wir txStore() direkt aus dem Testfall aufrufen und es funktioniert auch gut.
Bitte lassen Sie uns wissen, ob das Transaktionsmanagement nicht korrekt ist oder eine Lösung für dieses Problem hilfreich ist. Bitte aktualisieren Sie mich auch, wenn das Problem oder die Umgebung nicht klar ist. Danke im Voraus.!!
Danke 4 ur Antwort. Wir haben den defaultRollback-Wert in der TestCase-Klassenstufe als false festgelegt und keinen anderen Rollback für die Methodenstufen erhalten. Aber nur so funktioniert es, indem @Transactional zur Methode doStore() hinzugefügt wird. Wir können insert-Abfragen nur in diesem Fall gedruckt sehen, und doStores Annotation ist remove, nicht einmal eine einzige Einfüge-Abfrage wird gedruckt, wenn em.merge() aufgerufen wird. Aber wir konnten das nicht ändern, wie es in unserer Freezed-Framework-Klasse ist. Jede Hilfe wäre nennenswert. !! – raksja