Как получить свойства maven внутри теста JUnit? - PullRequest
19 голосов
/ 29 октября 2008

Я пишу тест для класса анализатора файлов. Метод parse получает имя файла в качестве параметра и должен его открыть, чтобы проанализировать (duh).

Я написал тестовый файл, который поместил в каталог test / resources внутри каталога моего проекта и хотел бы передать этот файл для проверки моего анализа. Поскольку этот проект находится в CVS и будет использоваться другими, я не могу жестко кодировать путь к файлу, поэтому я подумал об использовании свойства maven $ {basedir} для создания имени файла в моем тесте. Что-то вроде:

public void parseTest() {
    ...
    sut.parse( ${basedir} + "src/test/resources/testFile" );
    ...
}

Кто-нибудь знает, как мне этого добиться?

1 Ответ

25 голосов
/ 29 октября 2008

У вас есть 2 варианта:

1) Передайте путь файла к тесту через системное свойство ( docs )

В вашей поме вы могли бы сделать что-то вроде:

<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 есть концепция каталога ресурсов.

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