Spring + Maven: отдельные файлы свойств для модульных тестов и интеграционных тестов

Я использую Spring 2.5.6 и создаю свой проект с Maven 2.2.1. В Spring мы используем bean-компоненты PropertyPlaceholderConfigurer для загрузки свойств для настройки таких вещей, как база данных. Довольно стандартный материал. У нас также есть два разных набора тестов: модульные тесты и интеграционные тесты.

Я хотел бы иметь возможность использовать разные файлы свойств, чтобы по-разному настраивать такие вещи, как URL-адрес базы данных, для двух разных типов тестов. Например, я хочу, чтобы модульные тесты использовали базу данных localhost, а интеграционные тесты - базу данных mydatabase.example.com.

Я пробовал несколько вариантов, в которых я помещаю файлы свойств в отдельные подкаталоги (один для модульных тестов, а другой - для интеграционных). Оттуда я пробовал использовать тег additionalClasspathElements для maven-failsafe-plugin, но, похоже, это вообще не сработало. Я попытался использовать maven-antrun-plugin для копирования файлов в target/classes, но это не сработало, когда я запустил mvn verify -Dtest=sometest.

Я также попытался использовать systemPropertyVariables в maven, чтобы установить свойство с именем buildEnvironment, на которое я затем попытался ссылаться в своем определении bean-компонента Spring:

<property name="locations">
  <value>classpath:${buildEnvironment}/my-test.properties</value>
</property>

Но Spring отказалась разрешить ${buildEnvironment}. На данный момент у меня нет идей. Я уверен, что есть хороший и простой способ сделать это, но я не могу его понять.

Любой совет будет очень признателен.


person organicveggie    schedule 01.07.2010    source источник
comment
Вы видели этот связанный вопрос с другим ответом stackoverflow.com/questions/3076466/   -  person JoseK    schedule 07.07.2010
comment
Я также не могу заставить PropertyPlaceholderConfigurer видеть ресурсы, добавленные с помощью additionalClasspathElements. Кто-нибудь знает, почему это не работает?   -  person Lyle    schedule 31.10.2012


Ответы (1)


Вы можете включить фильтрацию ресурсов и создать свойства maven:

<build>
  <resources>
    <resource>
      <directory>src/test/resources</directory>
      <filtering>true</filtering>
    </resource>
  </resources>
</build>

<properties>
   <buildEnvironment>yourValue</buildEnvironment>
</properties>

Затем $ {buildEnvironment} в вашей конфигурации Spring будет преобразован в yourValue (при условии, что он находится в src / test / resources /)

person Wilhelm Kleu    schedule 02.07.2010
comment
Этот вид работает, хотя вы должны использовать ‹testResources› вместо ‹resources›, если хотите работать на этапах тестирования. К сожалению, похоже, что нет способа установить свойство по-другому для интеграционных тестов и модульных тестов без использования профилей. Это приемлемо, но не совсем то, на что я надеялся. :) - person organicveggie; 05.07.2010