Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Maven 2 如何在JUnit测试中检索maven属性?_Maven 2_Junit - Fatal编程技术网

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

Maven 2 如何在JUnit测试中检索maven属性?,maven-2,junit,Maven 2,Junit,我正在为一个文件解析器类编写一个测试。parse方法接收一个文件名作为参数,并且必须打开它才能解析它(duh) 我已经编写了一个测试文件,将其放入项目目录中的test/resources目录,并希望通过该文件来测试我的解析。由于此项目位于CVS中,并且将由其他人操作,因此我无法硬编码文件路径,因此我考虑在测试中使用maven${basedir}属性来构建文件名。比如: public void parseTest() { ... sut.parse( ${basedir} + "s

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

我已经编写了一个测试文件,将其放入项目目录中的test/resources目录,并希望通过该文件来测试我的解析。由于此项目位于CVS中,并且将由其他人操作,因此我无法硬编码文件路径,因此我考虑在测试中使用maven${basedir}属性来构建文件名。比如:

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地址)如何?。