Подтвердить что ты не робот

JUnit + Maven: доступ к значению ${project.build.directory}

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

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

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

4b9b3361

Ответ 1

Раньше я использовал что-то подобное. unit test все равно будет работать, даже если не использовать Maven, целевой каталог по-прежнему будет создан двумя контроллерами по отношению к cdd, где бы ни выполнялись тесты.

public File targetDir(){
  String relPath = getClass().getProtectionDomain().getCodeSource().getLocation().getFile();
  File targetDir = new File(relPath+"../../target");
  if(!targetDir.exists()) {
    targetDir.mkdir();
  }
  return targetDir;
}

Ответ 2

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

Ответ 3

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