JUnit + Maven: доступ к значению $ {project.build.directory} - PullRequest
24 голосов
/ 09 февраля 2011

В моих модульных тестах я хочу создать каталог tmp внутри $ {project.build.directory}. Как я могу получить доступ к значению $ {project.build.directory} внутри моего модульного теста?

Один из способов, который я мог бы придумать, - предоставить отфильтрованный файл свойств в ресурсах теста, в котором хранится это значение. (Я еще не пробовал, но думаю, что это должно сработать.)

Есть ли прямой способ получить / передать значение этого свойства?

С уважением, Florian

Ответы [ 3 ]

18 голосов
/ 29 августа 2012

Я использовал что-то подобное с некоторым успехом раньше.Модульный тест все равно будет запущен, даже если не используется Maven, целевой каталог все равно будет создан на две ступени выше относительно cwd того места, где проводятся тесты.

public File targetDir(){
  String relPath = getClass().getProtectionDomain().getCodeSource().getLocation().getFile();
  File targetDir = new File(relPath+"../../target");
  if(!targetDir.exists()) {
    targetDir.mkdir();
  }
  return targetDir;
}
13 голосов
/ 20 июля 2011

Я думаю, использование системных свойств довольно просто, если вы настроите плагин surefire, как описано здесь http://maven.apache.org/plugins/maven-surefire-plugin/examples/system-properties.html Даже пример там отвечает на ваш вопрос напрямую:

<project>
  [...]
  <build>
    <plugins>
      <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-surefire-plugin</artifactId>
         <version>2.9</version>
         <configuration>
           <systemPropertyVariables>
             <propertyName>propertyValue</propertyName>
             <buildDirectory>${project.build.directory}</buildDirectory>
             [...]
           </systemPropertyVariables>
         </configuration>
      </plugin>
    </plugins>
  </build>
  [...]
</project>
5 голосов
/ 09 февраля 2011

Помните, что ваши модульные тесты не должны выполняться из плагина Maven surefire, поэтому свойство ${project.build.directory} может быть недоступно. Чтобы сделать ваши тесты более портативными, я бы рекомендовал использовать File.createTempFile().

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