JUnit + Maven: доступ к значению ${project.build.directory}
В своих модульных тестах я хочу создать каталог tmp внутри $ {project.build.directory}. Как я могу получить доступ к значению $ {project.build.directory} внутри моего модульного теста?
Один из способов, о котором я мог бы подумать, - это предоставить отфильтрованный файл свойств в ресурсах теста, в котором хранится это значение. (Я еще не пробовал, но думаю, что это должно сработать.)
Есть ли прямой способ получить/передать значение этого свойства?
Ответы
Ответ 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()
.