Я могу использовать 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
, поэтому мои сценарии инициализации отсутствуют, и я получаю ошибку
Вызвано: java.io.FileNotFoundException: ресурс пути класса [schema.sql] не может быть открыт, потому что он не существует
Теперь все будет работать, если я положу скрипты в src/main/resources
, но эти скрипты предназначены только для заполнения встроенной базы данных для тестирования, и они вообще не принадлежат к военному файлу. Кто-нибудь знает, как настроить интеграционный тест, чтобы можно было использовать emedded базу данных, не загрязняя фактический файл войны, который будет развернут?
Я надеялся, что инициализация встроенной базы данных Spring может использовать что-то другое, кроме файла. Я думал о JNDI, но это, казалось бы, потребовало бы загрязнения файла web.xml определением ресурса для тестовых данных, которые (опять же) появятся в развертываемой войне. Или, может быть, есть варианты с использованием груза? Некоторые программные трюки с Spring, которые я не знаю?