Nous avons implémenté JUnit4 dans notre application qui utilise Spring core & JPA avec DB2. Nous devons tester une fonctionnalité complète qui récupère les données d'une base de données et fusionne dans une autre base de données.junit test case transaction ne pas être validée - aucune erreur
Un cas de test pour récupérer les données de la première base de données est écrit et il fonctionne parfaitement sans erreur mais les enregistrements ne sont pas stockés dans la deuxième base de données.
mise en œuvre
La classe TestCase, nous avons inclus les annotations suivantes pour faire le cas de test exécuté sous une transaction si nécessaire,
@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners({
DependencyInjectionTestExecutionListener.class,
TransactionalTestExecutionListener.class})
@ContextConfiguration(locations={""})
@TransactionConfiguration(transactionManager="defaultTransactionManager", defaultRollback=false)
@Transactional
Dans l'application, nous avons une classe de gestionnaire pour effectuer cette opération avec la méthode doSynch(). À partir de cette méthode, la méthode txStore() de la classe crudHelper sera appelée pour initialiser et appeler la méthode doStore() (dans la même classe) pour fusionner l'entité à la base de données.
Après sont les déclarative des transactions à travers ce cas test de logique
TestCase testSynch() - @Transactional(propagation=Propagation.SUPPORTS)
Manager doSynch() - @Transactional(propagation=Propagation.NEVER)
CRUDHelper txStore() - @Transactional(propagation=Propagation.REQUIRED)
doStore() - No Transactional annotation
doSynch() est marqué comme jamais aussi à ce moment, il n'a pas besoin de transaction et d'autres niveaux, comme dans CRUDHelper la transaction peut être marqué comme OBLIGATOIRE pour garantir la disponibilité d'une transaction.
Problème
ici lorsque nous courons le cas de test qui appelle la méthode doSynch() du gestionnaire pour tester la fonctionnalité, le flux complet fonctionne parfait, sauf que les dossiers ne sont pas fusionnés et aucune erreur sont jetés.
La méthode Manager, lorsqu'elle est appelée à partir d'une JSP, fonctionne très bien. Nous avons également testé en appelant txStore() directement à partir du cas de test et cela fonctionne également très bien. Veuillez nous faire savoir si la gestion des transactions n'est pas appropriée ou si une solution à ce problème vous sera d'une aide plus importante. Aussi les pls me mettent à jour si le problème ou l'environnement n'est pas clair. Merci d'avance.!!
Merci pour votre réponse. Nous avons défini la valeur defaultRollback comme false au niveau de la classe TestCase et aucune autre restauration n'est proposée pour les niveaux de méthode. Mais seul le cas comment cela fonctionne est en ajoutant @Transactional à la méthode doStore(). Nous pouvons voir les requêtes d'insertion imprimées uniquement dans ce cas et l'annotation de doStore est supprimée, pas même une seule requête d'insertion est imprimée lors de l'appel à em.merge(). Mais nous ne pouvions pas faire ce changement comme il est dans notre classe de cadre gelé. Toute aide serait appréciable. – raksja