21

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

我已经编写了一个测试文件,将其放入项目目录中的 test/resources 目录中,并希望通过该文件来测试我的解析。由于这个项目在 CVS 中,并且会被其他人操作,我不能硬编码文件路径,所以我想在我的测试中使用 maven ${basedir} 属性来构建文件名。就像是:

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

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

4

1 回答 1

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>

然后在您的测试中,您可以执行以下操作:

System.getProperty("filePath");

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

我强烈推荐选项 2 而不是选项 1。通过系统属性将内容传递给您的测试是非常肮脏的 IMO。它将您的测试不必要地与测试运行者结合起来,并且会在未来引起头痛。从类路径中加载文件是可行的方法,这就是 maven 具有资源目录概念的原因。

于 2008-10-29T17:03:16.593 回答