Я могу использовать 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, которых я не знаю?