Maven 2 如何在JUnit测试中检索maven属性?
我正在为一个文件解析器类编写一个测试。parse方法接收一个文件名作为参数,并且必须打开它才能解析它(duh) 我已经编写了一个测试文件,将其放入项目目录中的test/resources目录,并希望通过该文件来测试我的解析。由于此项目位于CVS中,并且将由其他人操作,因此我无法硬编码文件路径,因此我考虑在测试中使用maven${basedir}属性来构建文件名。比如:Maven 2 如何在JUnit测试中检索maven属性?,maven-2,junit,Maven 2,Junit,我正在为一个文件解析器类编写一个测试。parse方法接收一个文件名作为参数,并且必须打开它才能解析它(duh) 我已经编写了一个测试文件,将其放入项目目录中的test/resources目录,并希望通过该文件来测试我的解析。由于此项目位于CVS中,并且将由其他人操作,因此我无法硬编码文件路径,因此我考虑在测试中使用maven${basedir}属性来构建文件名。比如: public void parseTest() { ... sut.parse( ${basedir} + "s
public void parseTest() {
...
sut.parse( ${basedir} + "src/test/resources/testFile" );
...
}
<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>
有人知道我如何做到这一点吗?您有两种选择:
1) 通过系统属性()将文件路径传递到测试
在pom中,您可以执行以下操作:
public void parseTest() {
...
sut.parse( ${basedir} + "src/test/resources/testFile" );
...
}
<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>
2) 将文件放在src/test/resources中,与测试类位于同一个包下。然后可以使用Class.getResourceAsStream(字符串文件名)()访问该文件
我强烈推荐方案2而不是方案1。在我看来,通过系统属性将东西传递给测试是非常肮脏的。它会将测试不必要地耦合到测试运行者,并且会在将来引起头痛。从类路径加载文件是一种方法,这就是为什么maven有资源目录的概念。我选择选项2。但是,由于我想传递文件名,所以我没有使用Class.getResourceAsStream(字符串文件名)方法,而是使用Class.getResource(字符串文件名).getFile()。谢谢,迈克,很酷。请注意,如果您不得不使用JAR运行测试(这不太可能),您可能会遇到一些奇怪的行为。不确定这个答案是否完整-您可能希望存储在私有设置.xml中的“集成测试”属性(如本地DB地址)如何?。