2010-08-17 22 views
6

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

Respuesta

6

¿Marcas tus métodos con la anotación @Rollback?

Desde el JavaDoc:

anotación de prueba para indicar si o no la transacción por el método de ensayo anotada debe ser revertido después de que el método de prueba se ha completado. Si es verdadero, la transacción será retrotraída; de lo contrario, se confirmará la transacción .

+0

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

Cuestiones relacionadas