Maven - добавить каталог в classpath при выполнении тестов - PullRequest
39 голосов
/ 25 августа 2009

Junits, которые у меня есть в моем проекте, должны загружать файлы свойств из classpath. Как я могу указать каталог этих файлов свойств, чтобы Maven установил его в classpath перед запуском тестов?

Ответы [ 6 ]

34 голосов
/ 03 июля 2013

Вы также можете добавить новые папки тестовых ресурсов.

<build>
    <testResources>
        <testResource>
            <directory>${project.basedir}/src/test/resources</directory>
        </testResource>
        <testResource>
            <directory>${project.basedir}/src/test/something_else</directory>
        </testResource>
    </testResources>
</build>

Первый путь, src/test/resources, используется по умолчанию. Предполагая, что вы по-прежнему хотите использовать путь по умолчанию, убедитесь, что он включен. (Тег testResources перезаписывает ваши значения по умолчанию, поэтому, если вы явно не включите путь по умолчанию, он перестанет использоваться.)

33 голосов
/ 25 августа 2009

Вы можете использовать build-helper-maven-plugin , чтобы указать дополнительные каталоги test-resource следующим образом. Используя приведенную ниже конфигурацию, содержимое каталога test-resources будет скопировано в каталог target / test-classes во время этапа generate-test-sources :

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>build-helper-maven-plugin</artifactId>
  <version>1.12</version>
  <executions>
    <execution>
      <id>add-test-resource</id>
      <phase>generate-test-sources</phase>
      <goals>
        <goal>add-test-resource</goal>
      </goals>
      <configuration>
        <resources>
          <resource>
            <directory>path/to/additional/test/resources</directory>
            <excludes>
              <exclude>**/folder-to-exclude/**</exclude>
            </excludes>
          </resource>
        </resources>
      </configuration>
    </execution> 
  </executions>
</plugin>
25 голосов
/ 25 августа 2009

Если вы просто хотите поместить свои файлы свойств куда-нибудь на диск и не хотите копировать эти файлы свойств в target / test-classes во время сборки, вы можете сделать это следующим образом

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <additionalClasspathElements>
      <additionalClasspathElement>/add/this/to/path</additionalClasspathElement>
    </additionalClasspathElements>
  </configuration>
</plugin>
8 голосов
/ 22 января 2010

Почему бы просто не использовать test/resources и поместить ваши свойства в classpath с этой точки. Они будут там только на этапе тестирования.

4 голосов
/ 26 июня 2011

Если у вас есть среда с несколькими ресурсами, вы можете использовать профиль maven и размещать различные ресурсы в соответствии с профилем, который вы тестируете.

test/resources/uat
test/resources/prod
test/resources/dev

Но обычно, если вам нужно выполнить интеграционное тестирование, тогда вам не нужен плагин build-helper-maven-plugin.

2 голосов
/ 13 сентября 2012

maven-resources-plugin имеет цель copy-resources, которая позволит вам копировать ресурсы. Например:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.6</version>
    <executions>
      <execution>
        <id>additional-resources</id>
        <phase>process-test-resources</phase>
        <goals>
          <goal>copy-resources</goal>
        </goals>
        <configuration>
          <outputDirectory>${project.build.testOutputDirectory}</outputDirectory>
          <resources>
            <resource>
              <directory>${project.basedir}/conf</directory>
            </resource>
          </resources>
        </configuration>
      </execution>
    </executions>
  </plugin>

Это скопирует содержимое папки conf в базе вашего проекта в папку target/test-classes (если вы не изменили project.build.testOutputDirectory), которая будет добавлена ​​в classpath во время ваших модульных тестов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...