Hemos implementado JUnit4 en nuestra aplicación que utiliza Spring core & JPA con DB2. Necesitamos probar una funcionalidad completa que recupera datos de una base de datos y se fusiona en otra base de datos.junit caso de prueba transacción no se ha cometido - no hay errores
El caso de prueba para recuperar los datos de la primera base de datos está escrito y se ejecuta sin ningún error perfectamente, pero los registros no se almacenan en la segunda base de datos.
Implementación
La clase TestCase hemos incluido las siguientes anotaciones para hacer que el caso de prueba se ejecute en una transacción, si es necesario,
@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners({
DependencyInjectionTestExecutionListener.class,
TransactionalTestExecutionListener.class})
@ContextConfiguration(locations={""})
@TransactionConfiguration(transactionManager="defaultTransactionManager", defaultRollback=false)
@Transactional
En la aplicación que tenemos una clase Manager para realizar esta operación con el método doSynch() A partir de ese método, se llamará al método txStore() de la clase crudHelper para inicializar y llamar al método doStore() (en la misma clase) para fusionar la entidad a la base de datos.
siguientes son la declarativa transaccional a través hacia fuera este caso la lógica de prueba
TestCase testSynch() - @Transactional(propagation=Propagation.SUPPORTS)
Manager doSynch() - @Transactional(propagation=Propagation.NEVER)
CRUDHelper txStore() - @Transactional(propagation=Propagation.REQUIRED)
doStore() - No Transactional annotation
doSynch() se marca como nunca como en ese punto que no necesita ninguna operación y en otros niveles, tales como en CRUDHelper la transacción se puede marcar como REQUERIDO para garantizar que haya una transacción disponible.
Problema
aquí cuando corremos el caso de prueba, que llama al método del Administrador doSynch() para probar la funcionalidad, flujo completo está funcionando perfecto, excepto que los registros no se fusionan y no hay errores se tiran.
El método Manager cuando se llama desde un JSP funciona muy bien. También probamos llamando a txStore() directamente desde el caso de prueba y también funciona bien.
Por favor, háganos saber si la gestión de las transacciones no es adecuada o un trabajo en torno a este problema será de gran ayuda. También pls me actualiza si el problema o el entorno no está claro. Gracias por adelantado.!!
Gracias 4 ur reply. Hemos establecido el valor de DefaultRollback como falso en el nivel de clase TestCase y no se le ha dado ninguna otra reversión para los niveles de método. Pero solo el caso de cómo funciona es mediante la adición de @Transactional al método doStore(). Podemos ver las consultas de inserción impresas solo en este caso y la anotación de doStore es eliminar, ni siquiera se imprime una sola consulta de inserción cuando se llama a em.merge(). Pero no pudimos hacer ese cambio ya que está en nuestra clase de framework freezed. Cualquier ayuda sería apreciable. – raksja