Как использовать сценарии инициализации встроенной базы данных Spring на этапе тестирования интеграции -?

Я могу использовать Spring для создания и инициализации встроенных баз данных программно:

@Before
public void setUp() {
    database = new EmbeddedDatabaseBuilder()
           .setType(EmbeddedDatabaseType.H2)
           .addScript("schema.sql")
           .addScript("init.sql")
           .build();
   ....
}

или через конфигурацию Spring:

<jdbc:initialize-database data-source="dataSource">
  <jdbc:script location="classpath:schema.sql"/>
  <jdbc:script location="classpath:init.sql"/>
</jdbc:initialize-database>

Здесь мои скрипты schema.sqlи init.sqlхранятся в каталоге src/test/resources. Таким образом, если тесты с использованием встроенной базы данных выполняются с:

mvn test

то файлы, находящиеся в src/test/resources, доступны, и все в порядке.

Но теперь предположим, что вместо этого я хочу использовать встроенную базу данных вместе со встроенным веб-сервером (Jetty или встроенным Tomcat )в интеграционном тесте , запускаемом через

mvn integration-test

Теперь, на этой поздней фазе, я хочу выполнить тест почти с конца -по -, чтобы при нажатии на определенные URL-адреса для веб-службы возвращались ожидаемые ответы HTTP, предполагая, что определенные данные во встроенной базе данных. Но на данный момент война, развернутая на встроенном веб-сервере, не имеет файлов из src/test/resources, поэтому мои сценарии инициализации отсутствуют, и я получаю сообщение об ошибке

Caused by: java.io.FileNotFoundException: class path resource [schema.sql] cannot be opened because it does not exist

Теперь все будет работать, если я положу скрипты в src/main/resourcesно эти скрипты только для наполнения встроенной базы данных для тестирования и они не принадлежат к файл войны вообще. Кто-нибудь знает, как настроить интеграционный тест, чтобы можно было использовать встроенную базу данных, не загрязняя фактический файл войны, который будет развернут?

Я надеялся, что инициализация встроенной базы данных Spring может использовать что-то другое, кроме файла. Я думал о JNDI, но это, похоже, потребовало бы загрязнения файла web.xml определением ресурса для тестовых данных, которые снова ()появятся в развертываемой войне. Или возможно есть варианты с использованием груза? Некоторые программные трюки с Spring, которых я не знаю?

12
задан Ray Toal 9 August 2012 в 18:11
поделиться