Подтвердить что ты не робот

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

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

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

@Transactional public class SomeDaoImpl implements SomeDao {

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

Вопрос должен быть следующим: как ваши тесты, как написано, фиксируют транзакцию? Если вы никогда не совершаете, вы никогда не увидите записи.