Просмотр данных из транзакционных тестов — Hibernate Spring MySQL

#java #mysql #hibernate #spring #automated-tests

#java #mysql #гибернация #spring #автоматизированные тесты

Вопрос:

У меня есть куча тестов в приложении Hibernate / Spring. Вчера я перевел их с использования базового тестового класса JUnit 3.8, предоставленного Spring, на JUnit 4.4.

Все работает отлично, потому что теперь мои тесты завернуты в транзакции, а созданные / измененные данные автоматически откатываются (вместо того, чтобы я писал код для удаления вновь созданных объектов).

Единственная проблема заключается в том, что я не могу заглянуть в базу данных во время выполнения теста.Если тест завершается неудачей, я часто добавляю точки останова ближе к концу и просматриваю базу данных MySQL через SQL Yog, чтобы посмотреть, что происходит. Но сейчас я просто вижу пустые таблицы. (Я имею в виду интеграционные тесты, которые очень точно имитируют производство и фактически касаются базы данных.)

Я попытался установить уровень глобальной изоляции на чтение без ограничений, но это не изменило того факта, что я не могу видеть данные. Как я могу настроить Spring / Hibernate, чтобы разрешить мне просматривать данные из другого процесса?

Комментарии:

1. можете ли вы дать мне свой тестовый код? Если есть ошибка, пожалуйста, напишите ошибку в вашем вопросе.

Ответ №1:

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

 SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
  

Это только выявило еще одну тревожную проблему — во время выполнения тестов Hibernate фактически не выполнял некоторые действия, если я не использовал HibernateTemplate.flush(); после каждой операции Hibernate.
Поскольку это очень раздражает, я, наконец, установил Hibernate, чтобы он всегда сбрасывал запросы, вот так:

 HibernateTemplate hibernateTemplate;

... 

hibernateTemplate.setFlushMode(HibernateTemplate.FLUSH_ALWAYS);