2008-10-29 20 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