Мы используем огурец-jvm для написания слоя интеграционного теста в нашем приложении. Одна из проблем, с которыми мы столкнулись, — это управление базой данных между тестами и веб-приложением.
Типичный сценарий заключается в том, что мы хотим сохранить некоторые объекты на заданном этапе сценария, а затем выполнить некоторые действия в пользовательском интерфейсе, которые, в свою очередь, могут сохранить больше объектов. В конце мы хотим очистить базу данных. Поскольку тесты огурца-jvm находятся в одной jvm, а веб-приложение работает в другой jvm, мы не можем разделить транзакцию (по крайней мере, так, как я знаю), поэтому базу данных необходимо очищать вручную.
Моя первоначальная мысль состояла в том, чтобы использовать встроенный сервер Tomcat, работающий от встроенной базы данных в памяти (HSQLDB) в той же JVM, что и в тесте Cucumber-JVM. Таким образом, мы могли бы совместно использовать один контейнер Spring и, соответственно, одну транзакцию, из которой можно было бы получить все объекты.
Во время моих первоначальных тестов кажется, что Spring загружается и настраивается дважды: один раз, когда запускается тест и читается огурец.xml, и второй раз, когда запускается встроенный кот и веб-приложение читает свой applicationContext.xml. Кажется, что они находятся в двух совершенно разных контейнерах, потому что, если я попытаюсь разрешить объект в одном контейнере, который указан в другом контейнере, он не разрешится. Если я дублирую свою конфигурацию, я получаю ошибки о дублирующихся bean-компонентах с тем же идентификатором.
Есть ли способ сказать Spring использовать один и тот же контейнер как для моего тестового приложения, так и для встроенного кота?
Я использую Spring 3.2.2.GA и Embedded Tomcat 7.0.39 (последние версии обеих библиотек).
Я сумасшедший? Нужно ли мне предоставлять больше технических деталей? Извините, если я использую неправильную терминологию.
Спасибо
p.s. Если моя проблема покажется вам знакомой и вы можете предложить альтернативное решение по сравнению с тем, которое я пытаюсь решить, дайте мне знать!