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

StackOverflow https://stackoverflow.com/questions/247346

  •  05-07-2019
  •  | 
  •  

Вопрос

Я пишу тест для класса анализатора файлов. Метод 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 есть концепция каталога ресурсов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top