Spring, Spring Batch, Hibernate и JUnit и инициализация для нескольких интеграционных тестов - PullRequest
3 голосов
/ 27 июля 2011

У меня есть несколько тестовых классов, использующих Spring-Batch и Hibernate.Мои тестовые контексты устанавливают h2 в базе данных памяти, инициализируют фабрику сеансов hibernate, которая создает большую часть схемы db, а также выполняет некоторые специфические сценарии SQL для настройки объектов схемы базы данных, необходимых для весеннего пакета (не-orm).Hibernate делает очень хорошую работу, выполняя только то, что необходимо, однако сценарии весенней пакетной инициализации не такие умные.

Моя тестовая конфигурация использует встроенную базу данных h2, поэтому я могу безопасно инициализировать все один раз, однако мне нужно передать ее в spring только для инициализации остальной инфраструктуры интеграции (например, фабрики сеансов hbm и схем Spring-Batch).один раз для всей серии выполняемых тестов.

Все мои модульные тесты выполняются по отдельности, но тесты со 2 по N дают сбой при тестировании всего пакета, поскольку они многократно выполняют инициализацию одной и той же схемы БД и умирают () объект уже существует с ошибками.

Я ищу инициализацию контекста приложения для всей коллекции интеграционных тестов, а затем делегирую конфигурацию деталей для конкретного теста в контекст MyTest, но все еще инициализирую основнойконтекст приложения при запуске одного интеграционного теста.

У меня есть общий набор конфигурационных файлов Spring, которые импортируются в контекст теста для инициализации инфраструктуры, необходимой для тестирования сервисов приложений.Проблема заключается в запуске всех тестов в пакете и т. Д. Система тестирования вызывает одну и ту же инициализацию несколько раз.

Я надеюсь, что это довольно распространенная проблема, и я упустил подробности весной или из документации JUnit.

1 Ответ

3 голосов
/ 27 июля 2011
  1. По умолчанию Spring кэширует экземпляры ApplicationContext , которые загружаются для тестов.Единственными причинами, по которым он может инициировать новый, является то, что тест использует другой набор файлов контекста и, следовательно, нуждается в другом контексте, или тест использует аннотацию @ DirtiesContext .
  2. Почему бы просто не добавить "если не существует" в ваши сценарии sql?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...