如何在JUnit测试中检索maven属性?

Ale*_*dre 21 junit maven-2

我正在为文件解析器类编写测试.parse方法接收文件名作为参数,并且必须打开它才能解析它(duh).

我写了一个测试文件,我将其放入项目目录中的test/resources目录中,并希望传递此文件来测试我的解析.由于这个项目是在CVS中,并且会被其他人操纵,我无法对文件路径进行硬编码,因此我考虑使用maven $ {basedir}属性在我的测试中构建文件名.就像是:

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

有人知道我怎么能做到这一点?

Mik*_*eck 27

你有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>
Run Code Online (Sandbox Code Playgroud)

然后在你的测试中你可以做到:

System.getProperty("filePath");
Run Code Online (Sandbox Code Playgroud)

2)将文件放在src/test/resources下与测试类相同的包中.然后,您可以使用Class.getResourceAsStream(String fileName)(docs)访问该文件.

我强烈建议选项2优先于选项1.通过系统属性将事情传递给您的测试是非常脏的IMO.它将您的测试不必要地耦合到测试跑步者,并将导致头痛.从类路径加载文件是要走的路,这就是为什么maven具有资源目录的概念.

  • 不确定这个答案有多完整 - 你可能想要存储在私人settings.xml中的"集成测试"属性如本地数据库地址怎么样? (2认同)