Как получить свойства maven внутри теста JUnit?
Вопрос
Я пишу тест для класса анализатора файлов. Метод parse получает имя файла в качестве параметра и должен его открыть, чтобы проанализировать (duh).
Я написал тестовый файл, который поместил в каталог test / resources внутри моего каталога проекта, и хотел бы передать этот файл для проверки моего анализа. Поскольку этот проект находится в CVS и будет использоваться другими, я не могу жестко кодировать путь к файлу, поэтому я подумал об использовании свойства maven $ {basedir} для создания имени файла в моем тесте. Что-то вроде:
public void parseTest() {
...
sut.parse( ${basedir} + "src/test/resources/testFile" );
...
}
Кто-нибудь знает, как мне этого добиться?
Решение
У вас есть 2 варианта:
1) Передайте путь к файлу для теста через системное свойство ( документы ) р>
В вашем pom вы могли бы сделать что-то вроде:
<project>
[...]
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4.2</version>
<configuration>
<systemProperties>
<property>
<name>filePath</name>
<value>/path/to/the/file</value>
</property>
</systemProperties>
</configuration>
</plugin>
</plugins>
</build>
[...]
</project>
Тогда в своем тесте вы можете сделать:
System.getProperty("filePath");
2) Поместите файл в src / test / resources в тот же пакет, что и ваш тестовый класс. Затем вы можете получить к файлу, используя Class.getResourceAsStream (String fileName) ( docs ).
Я бы настоятельно рекомендовал вариант 2 вместо варианта 1. Передача данных в ваши тесты через системные свойства - очень грязная IMO. Он связывает ваши тесты без необходимости с тест-бегуна и вызовет головные боли в будущем. Загрузка файла из classpath - это путь, и именно поэтому в maven есть концепция каталога ресурсов.