Abbiamo implementato JUnit4 nella nostra applicazione che utilizza il core Spring & JPA con DB2. Abbiamo bisogno di testare una funzionalità completa che recupera i dati da un database e si fonde in un altro database.jent test case transazione non commessa - nessun errore
Il caso di test per il recupero dei dati dal primo database è scritto ed è in esecuzione senza errori, ma i record non vengono memorizzati nel secondo database.
Attuazione
La classe TestCase abbiamo incluso le seguenti annotazioni per rendere il caso di test eseguito in una transazione, se necessario,
@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners({
DependencyInjectionTestExecutionListener.class,
TransactionalTestExecutionListener.class})
@ContextConfiguration(locations={""})
@TransactionConfiguration(transactionManager="defaultTransactionManager", defaultRollback=false)
@Transactional
Nell'applicazione abbiamo una classe Manager per eseguire questo operazione con il metodo doSynch(). Da quel metodo, il metodo txStore() della classe crudHelper verrà chiamato per inizializzare e chiamare il metodo doStore() (nella stessa classe) per unire l'entità nel database.
seguenti sono le dichiarativa transazionale attraverso questo caso la logica di test
TestCase testSynch() - @Transactional(propagation=Propagation.SUPPORTS)
Manager doSynch() - @Transactional(propagation=Propagation.NEVER)
CRUDHelper txStore() - @Transactional(propagation=Propagation.REQUIRED)
doStore() - No Transactional annotation
doSynch() è contrassegnato come MAI come in quel punto non necessita di alcuna operazione e in ulteriori livelli come nel CRUDHelper transazione può essere contrassegnato come RICHIESTO per garantire che una transazione sia disponibile.
Problema
qui quando corriamo il banco di prova, che chiama il metodo del Gestore doSynch() per verificare la funzionalità, flusso completo sta lavorando perfetto, tranne che i record non vengono uniti e nessun errore sono gettati.
Il metodo Manager quando chiamato da un JSP funziona alla grande. Abbiamo anche testato chiamando txStore() direttamente dal caso di test e funziona anche bene.
Ti preghiamo di farci sapere se la gestione delle transazioni non è corretta o se è necessario risolvere questo problema sarà di maggiore aiuto. Inoltre, aggiornami se il problema o l'ambiente non sono chiari. Grazie in anticipo.!!
Grazie 4 ur risposta. Abbiamo impostato il valore defaultRollback come falso nel livello di classe TestCase e non abbiamo fornito alcun altro rollback per i livelli del metodo. Ma solo il caso in cui funziona è aggiungendo il metodo @Transactional a doStore(). Siamo in grado di vedere le query di inserimento stampate solo in questo caso e l'annotazione di doStore non viene rimossa nemmeno una singola query di inserimento viene stampata quando si chiama em.merge(). Ma non potevamo fare quel cambiamento come è nella nostra classe framework freezed. Qualsiasi aiuto sarebbe apprezzabile. !! – raksja