2008-10-29 59 views
17

我正在爲文件解析器類寫一個測試。解析方法接收文件名作爲參數,並且必須打開它才能解析(duh)。如何檢索JUnit測試中的maven屬性?

我已經寫了一個測試文件,我把它放到我的項目目錄下的test/resources目錄中,並且想通過這個文件來測試我的解析。由於這個項目在CVS中,並且會被其他人操作,所以我不能硬編碼文件路徑,所以我想在我的測試中使用maven $ {basedir}屬性來構建文件名。例如:

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

有人知道我怎麼能做到這一點?

回答

22

你有2種選擇:

1)通過系統屬性(docs

在你的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)把文件放入sr c/test/resources與你的測試類在同一個軟件包下。然後,您可以使用Class.getResourceAsStream(String fileName)(docs)來獲取文件。

我強烈建議選項2優於選項1.通過系統屬性將測試項目傳遞給您的測試非常髒IMO。它將你的測試與測試跑步者不必要的結合在一起,並會導致頭痛。從類路徑加載文件是要走的路,這就是爲什麼maven有一個資源目錄的概念。

+0

我會選擇2.但是,因爲我想傳遞文件名,而不是使用Class.getResourceAsStream(String fileName)方法,所以我使用了Class.getResource(String fileName).getFile()。 謝謝邁克 – Alexandre 2008-10-29 18:45:19