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

Как получить свойства maven внутри теста JUnit?

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

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

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

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

4b9b3361

Ответ 1

У вас есть 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. Передача вещей вашим тестам через системные свойства очень грязная ИМО. Он без проблем связывает ваши тесты с тестируемым бегуном и вызывает головные боли в будущем. Загрузка файла из пути к классам - это путь, и почему maven имеет концепцию каталога ресурсов.