2013-03-23 4 views
2

Вопрос в том, как я могу использовать разные файлы свойств для тестирования интеграции. Ниже приводится подробное объяснение.Интеграционные тесты с Maven в проекте Spring

Я пытаюсь выполнить тесты интеграции контейнеров с Maven, используя tomcat7-maven-plugin. В проекте используются Spring и JPA. В настоящее время, что я понял, это следующий:

  • имен теста Unit класса следовать шаблону * Test и работать с mvn test по maven-surefire-plugin
  • имен теста Интеграции класса следовать шаблону * IT и работать с mvn verify по maven-failsafe-plugin
  • с казнями можно вызвать, чтобы начать и остановить и развернуть кот войну файл

Все это работает, и когда я бегу mvn verify Tomcat запускается.

Однако вместо использования обычной базы данных я хотел бы использовать базу данных в памяти. Моя конфигурация базы данных определена в файле src/main/resources/META-INF/spring/database.properties, загруженном через context:property-placeholder.

Я пытался определить альтернативный файл в src/test/resources/META-INF/spring/database.properties, но игнорируется. Я знаю, что можно определить системные свойства в пределах tomcat7-maven-plugin, но я не знаю, как их использовать для запуска загрузки различных файлов свойств.

Моя конфигурация tomcat7-maven-plugin заключается в следующем:

<plugin> 
    <groupId>org.apache.tomcat.maven</groupId> 
    <artifactId>tomcat7-maven-plugin</artifactId> 
    <version>2.1</version> 
    <configuration> 
     <port>9090</port> 
     <path>/processing</path> 
     <useTestClasspath>true</useTestClasspath> 
     <systemProperties> 
      <example.value.1>alpha</example.value.1> 
     </systemProperties> 
    </configuration> 
    <executions> 
     <execution> 
      <id>start-tomcat</id> 
      <phase>pre-integration-test</phase> 
      <goals> 
       <goal>run-war-only</goal> 
      </goals> 
      <configuration> 
       <fork>true</fork> 
      </configuration> 
     </execution> 
     <execution> 
      <id>stop-tomcat</id> 
      <phase>post-integration-test</phase> 
      <goals> 
       <goal>shutdown</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

Свойства загружаются context-main.xml с помощью следующей строки:

<context:property-placeholder location="classpath*:META-INF/spring/*.properties"/> 

загружаю конфигурацию контекста из web.xml со следующим:

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath*:META-INF/spring/context-*.xml</param-value> 
</context-param> 

Любое предложение n о том, как загрузить файл альтернативных свойств для тестирования?

+0

'src/test/resources/META-INF/spring/database.свойства будут учтены в обычных тестах, но не в тестах с отказоустойчивостью, потому что тесты с отказоустойчивостью основаны на нормальной «войне», и это НЕ включает тестовые ресурсы src или test – Ralph

+0

Право, я подозревал, теперь я экспериментирую с профилями и 'maven-antrun-plugin', чтобы скопировать измененный файл свойств непосредственно в папку сборки. Если у кого-то есть лучшая идея, я все уши. – stivlo

ответ

2

Один из способов сделать это, с профилями Maven и муравьиным плагином. Я подозреваю, что это не самый элегантный способ, и я открыт для прослушивания лучшего решения, но на данный момент он решает мою проблему.

Профиль - это способ иметь другую конфигурацию Maven в зависимости от аргументов командной строки, поэтому в моем случае для запуска интеграционных тестов я запускаю команду mvn -Pintegration clean verify. Здесь integration это имя профиля, и определяется в pom.xml, после properties следующим образом:

<profiles> 
    <profile> 
     <id>standard</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
    </profile> 
    <profile> 
     <id>integration</id> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-antrun-plugin</artifactId> 
        <version>1.1</version> 
        <executions> 
         <execution> 
          <phase>test</phase> 
          <goals> 
           <goal>run</goal> 
          </goals> 
          <configuration> 
           <tasks> 
            <echo>Copying test database.properties to ${project.build.outputDirectory}/META-INF/spring/</echo> 
            <copy file="src/test/resources/META-INF/spring/database.properties" 
             todir="${project.build.outputDirectory}/META-INF/spring/" verbose="true" overwrite="true" /> 
           </tasks> 
          </configuration> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
</profiles> 

Использование mvn clean package вместо этого использовать стандартный профиль. Интересно отметить, что профили также можно определить вне pom, в .m2/settings.xml

См. Также: Building For Different Environments with Maven 2 - Обратите внимание, что параметр overwrite в копии необходим или он будет работать только наугад, и не упоминается в связанном документе.

Смежные вопросы