我正在为文件解析器类编写测试。 parse方法接收文件名作为参数,并且必须打开它才能解析它(duh)。
我写了一个测试文件,我将其放入项目目录中的test / resources目录中,并希望传递此文件来测试我的解析。由于这个项目是在CVS中,并且会被其他人操纵,我无法对文件路径进行硬编码,因此我考虑使用maven $ {basedir}属性在我的测试中构建文件名。类似的东西:
public void parseTest() {
...
sut.parse( ${basedir} + "src/test/resources/testFile" );
...
}
有人知道我怎么能实现这个目标?
答案 0 :(得分:25)
您有两个选择:
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)将文件放在src / test / resources下与测试类相同的包中。然后,您可以使用Class.getResourceAsStream(String fileName)(docs)来访问该文件。
我强烈推荐选项2而不是选项1.通过系统属性将事情传递给您的测试是非常脏的IMO。它将您的测试不必要地耦合到测试跑步者,并将导致头痛。从类路径加载文件是可行的方法,这就是为什么maven具有资源目录的概念。