Spring @Transactional не работает в тесте JUnit?

Я использую Spring 3.2, Hibernate и JUnit 4.

мой класс Dao выглядит следующим образом:

@Transactional public class SomeDaoImpl implements SomeDao {

операции обновления этой работы, если они выполняются непосредственно из веб-приложения. Однако я вижу, что интеграционные тесты junit, которые используют методы обновления, фактически не сохраняют изменения. Что-то откатывает транзакции назад, когда выполняются методы junit?

3 ответов


By ссылка сделки не сохраняется в тестовых условиях весной. Как уже упоминалось, хотя и необычно, если вам все же нужно это сделать, вы можете использовать @TransactionConfiguration и @Rollback чтобы изменить поведение по умолчанию.


DAOs не должны быть транзакционными. Как DAO может знать, должен ли он участвовать в более крупной транзакции?

службы должны владеть транзакциями в типичной многоуровневой архитектуре Spring.

типично запускать модульные тесты для баз данных таким образом, чтобы они выполняли откат. Вы не хотите, чтобы ваши тесты изменяли базу данных, если вы не настроили тестовую базу данных, которую вы можете удалить и воссоздать по желанию.

вопрос должен быть: как ваш тесты, как написано, совершают сделки? Если вы никогда ничего не сделаете, вы никогда не увидите записей.


из раздела" тестирование " документов можно использовать

 @Rollback(false) 

аннотация если вы не хотите, чтобы SpringJUnit4ClassRunner откатил ваши транзакции.