2012-05-23 24 views
12

estoy usando Primavera 3.2, Hibernate y JUnit 4.Spring @Transactional no funciona en la prueba JUnit?

Mi clase Dao es el siguiente:

@Transactional public class SomeDaoImpl implements SomeDao {

Las operaciones de actualización en este trabajo si se ejecuta directamente desde la aplicación web. Sin embargo, estoy viendo que las pruebas de integración junit que ejercitan los métodos de actualización en realidad no persisten los cambios. ¿Hay algo que retome las transacciones cuando se ejecutan los métodos junit?

Respuesta

22

Por reference, las transacciones son no persistieron en contextos de prueba en primavera. Como se mencionó, aunque es inusual, si aún necesita hacerlo, puede usar @TransactionConfiguration y @Rollback para cambiar el comportamiento predeterminado.

11

Los DAO no deben ser transaccionales. ¿Cómo puede un DAO saber si debería participar en una transacción más grande?

Los servicios deben tener transacciones propias en la arquitectura típica de Spring Layered.

Es típico ejecutar las pruebas unitarias de las bases de datos de forma que se retrotraigan. No desea que sus pruebas alteren la base de datos, a menos que haya configurado una base de datos de prueba que pueda descartar y recrear a voluntad.

La pregunta debería ser: ¿cómo sus pruebas, tal como están escritas, comprometen la transacción? Si nunca te comprometes, nunca verás los registros.

+0

lo siento debería haber agregado que estoy usando hibernate para la persistencia. – Nilesh

+0

No cambia mi respuesta. – duffymo

+2

No se suponía que fuera un comentario en tu respuesta de todos modos :-). Por cierto, la mejor práctica que mencionaste anteriormente está bien publicada. ¡Creo que te perdiste al tratar de ser pedante y te olvidaste de responder la pregunta real! – Nilesh

Cuestiones relacionadas