#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);