2008-10-29 5 views
17

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

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

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

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

ответ

22

У вас есть 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) Поместите файл внутри sr c/test/resources в том же пакете, что и ваш тестовый класс. Затем вы можете перейти к файлу с помощью Class.getResourceAsStream (String fileName) (docs).

Я бы настоятельно рекомендовал вариант 2 по сравнению с вариантом 1. Передача вещей вашим тестам через системные свойства очень грязная ИМО. Он без проблем связывает ваши тесты с тестируемым бегуном и вызывает головные боли в будущем. Загрузка файла из пути к классам - это путь, и поэтому у maven есть концепция каталога ресурсов.

+0

Я возьму вариант 2. Но поскольку я хочу передать имя файла, вместо использования метода Class.getResourceAsStream (String fileName), я использую Class.getResource (String fileName) .getFile(). Спасибо Mike – Alexandre 2008-10-29 18:45:19