如何在单元测试中读取配置文件?

时间:2011-09-20 13:42:40

标签: java unit-testing maven

我有一个标准的maven项目布局 某些配置文件存储在src/main/conf中 现在,我想在src/test的单元测试中阅读这些文件(例如,从其中一个文件中读取属性)。
我怎么能完全这样做?

3 个答案:

答案 0 :(得分:7)

您需要配置maven以将这些文件用作测试资源。

只需在pom.xml中指定即可。 maven将处理与测试资源相同的配置文件。

  <build>
    ...
    <testResources>

      <!-- don't forget to specify the default test resources directory -->
      <testResource>
        <directory>src/test/resources</directory>
      </testResource>

      <!-- add the config directory -->
      <testResource>
        <directory>src/main/conf</directory>
      </testResource>

    </testResources>
    ...
  </build>

此设置将强制maven在运行单元测试之前将配置文件复制到target/tests-classes。 然后,您的单元测试将在类路径上包含配置文件,您可以使用getClass().getResource("/yourConfigFile.conf")读取它们。

答案 1 :(得分:2)

您应该将这些文件放在src/main/resources中,这样它们就会包含在类路径中,并可通过this.getClass().getResourceFromStream("...")访问。

编辑:正如bbaja42所说,如果他们只用于测试,他们应该进入src/test/resources

答案 2 :(得分:2)

只需补充Christoffer的答案,为了在测试中访问src / main / conf,您需要将该文件夹添加到maven-surefire-plugin类路径配置中:

<build>
    <plugins>
    .....   
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.9</version>
    <configuration>
      <additionalClasspathElements>
        <additionalClasspathElement>src/main/conf</additionalClasspathElement>           
      </additionalClasspathElements>
    </configuration>
  </plugin> 

....
             

然后你就可以从classpath加载文件了。假设文件为src / main / conf / test.txt:

this.getClass()。的getResourceAsStream( “/的test.txt”)

为了在Eclipse中运行它,您还需要将该文件夹添加到构建路径中。

您可以在以下网址找到更多信息:http://maven.apache.org/plugins/maven-surefire-plugin/examples/configuring-classpath.html