Как использовать сценарии инициализации базы данных Spring embedded на этапе тестирования интеграции?
Я могу использовать 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
. Поэтому, если тесты с использованием встроенного databse выполняются с:
mvn test
затем файлы, находясь в src/test/resources
доступны, и все нормально.
но теперь предположим, что я хочу вместо этого использовать встроенную базу данных вместе со встроенным веб-сервером (Jetty или embedded Tomcat) в интеграционного тестирования, Котор побежали через
mvn integration-test
теперь на этом позднем этапе я хочу сделать почти сквозной тест, который при попадании определенных URL-адресов для веб-службы возвращает ожидаемые HTTP-ответы, предполагая определенные данные во встроенной базе данных. Но на данный момент война, развернутая во встроенном веб-сервере, не имеет файлов из src/test/resources
таким образом, мои сценарии инициализации отсутствуют, и я получаю ошибка
вызвано: java.Ио.FileNotFoundException: ресурс пути к классу [схема.sql] не может быть открыт, потому что он не существует
теперь все будет работа, если я помещаю скрипты в src/main/resources
но эти скрипты предназначены только для заполнения встроенной базы данных для тестирование и не принадлежат в файле войну. Кто-нибудь знает, как настроить интеграционный тест, чтобы база данных emedded можно ли использовать, не загрязняя фактический файл войны, который будет развернут?
Я надеялся, что встроенная инициализация базы данных Spring может использовать что-то другое, чем файл. Я подумал о JNDI, но это, похоже, потребует загрязнения сети.xml-файл с определением ресурса для тестовых данных, который (снова) появится в развертываемой войне. Или, может быть, есть варианты использования груза? Некоторые программные трюки с Spring, которые я не знаю?
1 ответов
вы должны быть в состоянии сделать это:
<jdbc:initialize-database data-source="dataSource">
<jdbc:script location="file:///${project.basedir}/src/test/resources/schema.sql"/>
<jdbc:script location="file:///${project.basedir}/src/test/resources/init.sql"/>
</jdbc:initialize-database>